2013-03-25 2 views
0

У меня есть требование сделать файлы на файловом сервере доступными для загрузки через приложение, запущенное на веб-сервере. Пользователи будут нажимать на ссылки, доступные на странице приложения, и появится диалоговое окно сохранения. Такой вариант использования довольно распространен, и я могу говорить об основной вещи, но я был бы признателен, если кто-нибудь сможет подтвердить правильность моих следующих предположений.ASP.NET - ли потоковый файл для клиента занимает память сервера?

1) С файлами на файловом сервере, фактически сопоставленными через виртуальный каталог на веб-сервере, доступным для приложения (в виде ссылок), можно напрямую передать его клиенту с использованием содержимого-распоряжения (с кодом аналогично ответу here), что означает без привлечения какого-либо кода для обработки или фрагментации файла с целью его потоковой передачи.

2) Поскольку файл напрямую передается с файлового сервера, веб-сервер не имеет никакого отношения к памяти или дискам (процессор будет использоваться, конечно).

Благодаря

+0

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

+0

Я еще не написал код, но намерен использовать аналогичное показ шаблона в ссылке, которую я поделил. Я действительно ищу способ, которым я бы не нарушил использование памяти и диска на веб-сервере, когда файлы загружаются с файлового сервера. Вы уверены, что код будет занимать память «веб-сервера»? это меня удивляет. Мое понимание было то, что он напрямую передается с файлового сервера, он может не занимать память или беспокоить диск веб-сервера. Спасибо и оцените ваш ответ. – Lalman

+0

Фактически, ссылка, которую я использовал, использует файл с локального «веб-сервера», но в моем случае я намерен указать на виртуальный каталог, который, в свою очередь, указывает на файловый сервер. В этом случае использование дискового пространства файлового сервера может увеличиться (и может быть не память), но на диске или на сервере веб-сервера не повлияет правильно? Спасибо – Lalman

ответ

2

Поскольку вы хотите записывать файлы прямо и держать вас объем памяти до минимума, рассмотреть вопрос об использовании HttpResponse.TransmitFile

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

Это, насколько мне известно, самый эффективный способ отправки файла в ответ, если вам нужно написать его через asp.net.

Response.AppendHeader("Content-Disposition", "attachment; filename="+ fileName); 
Response.TransmitFile(fullPath); 
Response.Flush(); 
Response.End(); 
+0

Это именно то, что я, возможно, хотел сделать. Спасибо nunespascal! – Lalman