HttpException на OutputStream. Как правильно отправить файл - PullRequest
0 голосов
/ 05 декабря 2011

Я использую приведенный ниже код для отправки файла из ASP.NET Rest Api клиенту.Иногда я вижу журналы ошибок «Удаленный хост закрыл соединение. Код ошибки 0x800703E3».Это правильный метод для отправки ответа потока?

var outputFileName;                   
context.Response.ContentType = WebHelper.GetMimeType(outputFileName);
context.Response.AddHeader("Content-Disposition", string.Format("{0}; filename={1}", "attachment", outputFileName));
context.Response.AddHeader("Content-Length", binaryData.Length.ToString());
context.Response.OutputStream.Write(binaryData, 0, binaryData.Length);
context.Response.Flush();
context.Response.Close();

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Если у вас есть данные в файле, гораздо лучше использовать Response.TransmitFile , чем Response.OutputStream.Write, поскольку TransmitFile не будет буферизовать данные файла в памяти.

Что касается сообщения об ошибке, которое вы получаете, это совершенно нормально.Если пользователь отключается от сети, отменяет загрузку или закрывает свой браузер во время передачи файла, появится это сообщение об ошибке, сообщающее, что передача не была завершена.

0 голосов
/ 05 декабря 2011

Вот это:

context.Response.Clear();

context.Response.ContentType = ...;
context.Response.AddHeader( "Content-Disposition", ... );
// do not set Content-Length
context.Response.Write( binaryData );
context.Response.Flush();
context.Response.End();
...