2013-03-12 2 views
2

Мне нужно предоставить пользователям доступ к ограниченным файлам. Посмотрели на использование универсального манипулятора для этой операции.Filedownload с низкой памятью даже с большими файлами

Файлы могут быть довольно большими, по крайней мере, 1,5 ГБ.

Нам необходимо обслуживать эти файлы с использованием небольшого объема памяти/памяти.

На данный момент мы смотрим на это как решение:

request.ContentType = "text/plain"; 
request.ContentLength = byteArray.Length; 
Stream dataStream = request.GetRequestStream(); 
int buffersize = 65536; 
byte[] buffer = new byte[buffersize]; 
using (StreamReader reader = new StreamReader(filename)) 
{ 
    int count = 0; 
    while (true) 
    { 
     int count = reader.Read(buffer, 0, buffersize); 
     dataStream.Write(buffer, 0, count); 
     if (count < buffersize) break; 
    } 
} 

Будет ли это работать для нас?

Есть ли лучшие решения?

Зачем нам нужно следить?

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

+2

Не используйте StreamReader. Он предназначен только для текстовых файлов и не нужен/нужен здесь. –

ответ

4

Вам необходимо использовать метод HttpResponse.TransmitFile. Это не будет буферизовать файл в памяти, но вы все равно получите все необходимые элементы управления.

+0

Так что просто что-то простое: Response.ContentType = "application/pdf"; Response.TransmitFile (@ "test.pdf"); Response.End(); ? – mfriis

+1

Вам следует пропустить 'Response.End' - позволить обработчику закончить нормально. –

Смежные вопросы