Загрузка C # http с большими файлами (300 Мб) прекращается через несколько минут (после 80 Мб) - PullRequest
0 голосов
/ 02 августа 2010

Я использую следующий код для отправки .zip-файла клиенту, он отлично работает для файлов размером около 60-80 Мб, но когда я пытаюсь работать с большими файлами (300 Мб), клиенты сообщают, что браузер (как IE, так и FFX)просто останавливает процесс загрузки через несколько минут (около 80 МБ), и больше ничего не происходит.

Интересно, может ли быть проблема с настройкой IIS, которая останавливает выполнение потока обработки запросов через несколько минут или еслис моим кодом что-то не так.

Я, очевидно, мог бы найти другие способы доставки .zip-файлов, но эта проблема немного беспокоит меня, и я хочу, чтобы она работала.

Код:

        Response.ContentType = "application/zip";

        Response.AddHeader("Content-Disposition", "attachment; filename=" + "hands.zip");
        var fi = new FileInfo(dld.Path);
        Response.AddHeader("Content-Length", fi.Length.ToString());
        const int buffercnt = 50000;
        var buffer = new byte[buffercnt];            
        using (var br = new BinaryReader( new StreamReader(dld.Path).BaseStream))
        {
            int read = br.Read(buffer, 0, buffercnt);
            while(read != 0)
            {
                Response.OutputStream.Write(buffer, 0, read);
                read = br.Read(buffer, 0, buffercnt);
                Response.Flush();
            }           
        }
    Response.Close();
    Response.End();

1 Ответ

1 голос
/ 02 августа 2010

Вы можете установить свойство executionTimeout в теге httpRuntime в web.config, чтобы предотвратить прерывание кода.

Извините, что сказал это, но вы запутались, читая файл. Вы создаете StreamReader только для того, чтобы он открыл для вас FileStream, и вы не распоряжаетесь StreamReader должным образом. Кроме того, вы используете BinaryReader, но вы не используете его возможности, метод Read доступен непосредственно из FileStream. Итак, пропустите StreamReader и BinaryReader и просто создайте FileStream самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...