Альтернатива Response.TransmitFile для передачи файлов по HTTP - PullRequest
3 голосов
/ 20 июля 2009

Я работаю на веб-сайте ASP.NET, который позволяет пользователям загружать файлы.

Ранее файлы хранились на том же сервере, что и веб-сайт, поэтому мы могли сделать:

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(path);
Response.End();

Однако теперь некоторые файлы хранятся на отдельном сервере. Я могу проверить, что файлы существуют, используя

WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();

Но как я могу облегчить передачу, так как TransmitFile требует виртуальный путь, а не URL?

Мне нужно, чтобы пользователи могли выбирать, куда сохранять файл, как при обычной загрузке через Интернет

Какой лучший способ сделать это?

Ответы [ 4 ]

5 голосов
/ 07 декабря 2010

Если вы можете получить поток ответов через веб-запрос, вы сможете скопировать поток в ваш выходной поток согласно следующему фрагменту:

while ((read = stream.Read(buffer, offset, chunkSize)) > 0)    
{

    Response.OutputStream.Write(buffer, 0, read);
    Response.Flush();
}
2 голосов
/ 30 сентября 2009

Вы не можете использовать TransferFile для удаленного файла. Но вы можете использовать WriteFile для этого.

1 голос
/ 20 июля 2009
  1. Не могли бы вы перенаправить пользователя на URL-адрес на другом сервере?
  2. Вы можете передать запрос на другой сервер. Когда вы вызываете «GetResponse», возьмите поток и запишите его содержимое в ваш объект Response.
0 голосов
/ 20 июля 2009

Вы можете сопоставить диски удаленных серверов как общие ресурсы, а затем использовать TransmitFile. Если у серверов нет прямой видимости, вы можете включить WebDAV на удаленных серверах, а затем сопоставить их с физическим путем и использовать TransmitFile.

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