Как записать контекст FileStream в мой HTTP-ответ ASP.net? - PullRequest
1 голос
/ 21 сентября 2011

Предположим, я хочу, чтобы мой веб-сервер ASP.net открыл файл и затем отправил его в браузер.

Сначала я напишу это:

FileInfo file = new System.IO.FileInfo(@"\\myshare\myfile.zip");
FileStream fileStream = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read);

Что будет дальше?

Я бы подумал, что-то вроде Response.Write(..., но мне сложно разобраться.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2011

прямо из MSDN:

HttpResponse.BinaryWrite Method

 FileStream MyFileStream;
 long FileSize;

 MyFileStream = new FileStream("sometext.txt", FileMode.Open);
 FileSize = MyFileStream.Length;

 byte[] Buffer = new byte[(int)FileSize];
 MyFileStream.Read(Buffer, 0, (int)FileSize);
 MyFileStream.Close();

 Response.Write("<b>File Contents: </b>");
 Response.BinaryWrite(Buffer);

Edit: конечно, есть и много других методов, таких как потоковая передача, которая позволяет вам никогда не выделять буфер byte [] сразу на веб-сервере. Это было только отправной точкой ...

1 голос
/ 21 сентября 2011

Хороший способ отправки файлов - использование заголовка расположения содержимого перед отправкой фактических необработанных данных

, например:

Response.ContentType = "application/jpeg";
Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
Response.WriteFile(path);
Response.End();

, где fileName - это просто имя файла (с расширением) и путь - это полный путь к файлу

...