Re: Serve up file from outside web application directory

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Hi Brian,

Any progress on this or does the further info in my last reply still helps
some? If you have any further questions on this, please don't hesitate to
let me know.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead

This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------

References: <#c5n#jB4HHA.4672@xxxxxxxxxxxxxxxxxxxx>
<iKGdnaUWU_Dw7lnbnZ2dnUVZ8sqjnZ2d@xxxxxx>
<t-udnbOodYIv7lnbnZ2dnUVZ8qeknZ2d@xxxxxx>
<F5HBEhH4HHA.6140@xxxxxxxxxxxxxxxxxxxxxx>
<OBnTnXb5HHA.5984@xxxxxxxxxxxxxxxxxxxx>
<STsz1Vf5HHA.2340@xxxxxxxxxxxxxxxxxxxxxx>
<#MGOOWl5HHA.3940@xxxxxxxxxxxxxxxxxxxx>


Hi Brian,

Thanks for your followup.

I've rechecked the code and it does be a mistake in my code as I used
"Response.Write" to write out the byte[](binary data), this is incorrect.
I
should use the "BinaryWrite" method for binary data(byte[] array).
"Response.Write" should be used for string text data.

Here I've pasted two methods both of which can do the work(one write out
binary data and another write out string data), you can have a look and
choose either one as you want:


binary approach>>>>>>>>>
protected void BinaryWriteMethod()
{
byte[] bytes = null;
string path = "e:\\temp\\temp.txt"; // This file exists and has
one sentence in it: The quick brown fox...etc.

bytes = System.IO.File.ReadAllBytes(path);

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "text/plain";
Response.ContentEncoding = Encoding.UTF8;
Response.AddHeader("Content-disposition", "attachment;
filename=sometext.txt");

Response.BinaryWrite(bytes);
Response.End();

}

text string approach>>>>>>>>

protected void StringWriteMethod()
{

string path = "e:\\temp\\temp.txt"; // This file exists and
has one sentence in it: The quick brown fox...etc.

StreamReader sr = new StreamReader(path, Encoding.UTF8);

string data = sr.ReadToEnd();

sr.Close();

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "text/plain";
Response.ContentEncoding = Encoding.UTF8;
Response.AddHeader("Content-disposition", "attachment;
filename=sometext.txt");

Response.Write(data);
Response.End();
}


BTW, for string text approach, you need to make sure the text
encoding(specified in code) matches the text file's text encoding.

Hope this helps. If there is still anything unclear, please don't hesitate
to let me know.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



This posting is provided "AS IS" with no warranties, and confers no rights.














--------------------
From: "Brian Simmons" <centraso@xxxxxxxxxxxxxxxx>
References: <#c5n#jB4HHA.4672@xxxxxxxxxxxxxxxxxxxx>
<iKGdnaUWU_Dw7lnbnZ2dnUVZ8sqjnZ2d@xxxxxx>
<t-udnbOodYIv7lnbnZ2dnUVZ8qeknZ2d@xxxxxx>
<F5HBEhH4HHA.6140@xxxxxxxxxxxxxxxxxxxxxx>
<OBnTnXb5HHA.5984@xxxxxxxxxxxxxxxxxxxx>
<STsz1Vf5HHA.2340@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: Serve up file from outside web application directory
Date: Fri, 24 Aug 2007 09:48:41 -0400
Lines: 84
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.3138
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138
X-RFC2646: Format=Flowed; Original
Message-ID: <#MGOOWl5HHA.3940@xxxxxxxxxxxxxxxxxxxx>
Newsgroups: microsoft.public.dotnet.framework.aspnet
NNTP-Posting-Host: 65.124.198.22
Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP05.phx.gbl
Xref: TK2MSFTNGHUB02.phx.gbl
microsoft.public.dotnet.framework.aspnet:39662
X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet

Hi Steven,

Here is my exact code from the Page_Load event (sometext.aspx):
byte[] bytes = null;
string path = "C:\\sometext.txt"; // This file exists and has
one
sentence in it: The quick brown fox...etc.

bytes = File.ReadAllBytes(path);

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "text/plain";
Response.AddHeader("Content-disposition", "attachment;
filename=sometext.txt");

Response.Write(bytes);
Response.End();

How I'm Calling that sometext.aspx page:
<a href='sometext.aspx' target='_blank'>Some Text</a>

What happens when that link is clicked:
A new browser window is spawned. IE7 displays a dialog:
Do you want to open or save this file?

If you click open, Notepad displays and the text inside Notepad is:
System.Byte[]

If you click save (to your Desktop let's say), the file saves, and it's
contents are:
System.Byte[]

Any ideas?

Thanks,
Brian


"Steven Cheng[MSFT]" <stcheng@xxxxxxxxxxxxxxxxxxxx> wrote in message
news:STsz1Vf5HHA.2340@xxxxxxxxxxxxxxxxxxxxxxxxx
Thanks for your followup Brian,

for the text file with "System.Byte[]" problem you mentioned, do you
mean
the file download dialog display the filename as "System.Byte[]"?

If this is the case, I suggest you check the code to see whether you
have
add the "Content-Disposition" header and supply the filename. Because
when
you stream out a file(or other binary content), the ASP.Net won't care
what's their original filename, you need to explicitly supply them.e.g.

======================
protected void Page_Load(object sender, EventArgs e)
{
byte[] bytes = null;
string path = @"d:\filestore\pdf_files\test.pdf";

bytes = File.ReadAllBytes(path);

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType= "text/plain";

//here put the filename
Response.AddHeader("Content-disposition", "attachment;
filename=test.txt");

Response.Write(bytes);
Response.End();
}
===========

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no
rights.








.



Relevant Pages

  • Re: Serve up file from outside web application directory
    ... This posting is provided "AS IS" with no warranties, and confers no ... rights. ... "Response.Write" should be used for string text data. ... binary data and another write out string data), you can have a look and ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: text compare takes very long...
    ... Actually I wouldn't get too excited about it because Donald's code has already accomplished the most important task of allowing your code to deal with integers (Byte arrays) instead of with string data, so Donald has already speeded your stuff up almost as much as it will go. ... Dim m As Long ' length of String2 ...
    (microsoft.public.vb.general.discussion)
  • Re: C# and System.Data.SqlClient.SqlException
    ... won't have rights to do this. ... happens or impersonating the app pool account in your code. ... > Procedure "" string ... not the domain account used on the portal's ...
    (microsoft.public.sharepoint.portalserver.development)
  • Re: XP security tab - group or user names odd entry
    ... Partly anyway - can't tell you why the rights are not removed with the user, ... connection - when you've got a good connection to your DC's, ... It was a string of digits ...
    (microsoft.public.windowsxp.security_admin)
  • Re: What am I missing?
    ... pointer to the address 0. ... > I think the main problem here though is that you're using dynamic String ... the string data is stored elsewhere and the ... > Optional ByVal inAsWide As Boolean = False) As String ...
    (microsoft.public.vb.winapi)