Response.TransmitFile的替代方案,用于通过HTTP传输文件

时间:2009-07-20 18:41:33

标签: c# asp.net httpwebrequest

我正在开发一个允许用户下载文件的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 个答案:

答案 0 :(得分:5)

如果您可以通过网络请求获取响应流,则应该能够根据此代码段将流复制到输出流:

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

    Response.OutputStream.Write(buffer, 0, read);
    Response.Flush();
}

答案 1 :(得分:2)

您无法将TransferFile用于远程文件。 但你可以使用WriteFile。

答案 2 :(得分:1)

  1. 您可以将用户重定向到其他服务器上的网址吗?
  2. 您可以将请求代理到其他服务器。当您调用“GetResponse”时,请将该流并将其内容写入您的Response对象。

答案 3 :(得分:0)

您可以将远程服务器的驱动器映射为共享,然后使用TransmitFile。如果服务器没有视线,您可以在远程服务器上启用WebDAV,然后将它们映射到物理路径并使用TransmitFile。