C # Response.WriteFile vs Response.TransmitFile проблемы с размером файла - PullRequest
8 голосов
/ 21 января 2010

У меня есть 5 МБ pdf на сервере, загрузка этого файла с использованием writeFile дает мне загрузку 15 МБ, где в качестве файла передачи выдается правильный размер файла 5 МБ ...

Это из-за какого-то несжатия в памяти на сервере для writeFile? Просто удивляйтесь, если бы кто-нибудь видел, что происходит то же самое ...

(ps только заметил это, так как мы пошли на iis7 ??)

код, являющийся ...

if (File.Exists(filepath))
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\"");
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString());

    //HttpContext.Current.Response.WriteFile(filepath);
    HttpContext.Current.Response.TransmitFile(filepath);

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
}

Ответы [ 2 ]

7 голосов
/ 21 января 2010

TransmitFile - записывает указанный файл непосредственно в поток вывода ответа HTTP без буферизации его в памяти.

WriteFile - записывает указанный файл непосредственно в поток вывода ответа HTTP.

Я бы сказал, что разница возникает из-за того, что файл передачи не буферизует его. Файл записи использует буферизацию (Afiak), в основном временно хранит данные перед их передачей, поэтому он не может угадать точный размер файла, поскольку записывает его в виде фрагментов.

3 голосов
/ 19 мая 2015

Вы можете понять по следующему определению.

Response.TransmitFile VS Response.WriteFile:

  • TransmitFile: этот метод отправляет файл клиенту, не загружая его в память приложения на сервере. Это идеальный способ использовать его, если размер загружаемого файла велик.

  • WriteFile: этот метод загружает загружаемый файл в память сервера перед отправкой его клиенту. Если размер файла большой, вы можете перезапустить рабочий процесс ASPNET. *

Ссылка: - TransmitFile VS WriteFile

...