2009-07-20 44 views
3

我正在开发允许用户下载文件的ASP.NET网站。用于通过HTTP传输文件的Response.TransmitFile的替代方案

以前的文件存储在同一服务器的网站上,所以我们可以这样做:

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?

我需要的用户能够选择在那里将文件保存为一个正常的网络下载

什么是做到这一点的最好方法是什么?

+0

我希望我不是太天真了。您可以提供超链接,其中包含其他服务器上的文件的URL(除非您想自己跟踪事情,或者希望在文件传输到客户端之前进行预处理)。 – shahkalpesh 2009-07-20 19:13:50

回答

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

并注意API的答案是Reponse.BinaryWrite – 2009-07-20 18:47:51

+0

我无法重定向,因为需要提示用户在每个实例中保存文件 - 即使下载是通常可以在Web浏览器中打开的图像。 你能给我一个如何代理请求的例子吗?我不确定我明白你的意思! 感谢您的建议 – mancmanomyst 2009-07-20 19:16:19

0

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

2

您无法将TransferFile用于远程文件。 但是你可以使用WriteFile来做到这一点。

5

如果你能得到通过Web请求的响应流,你应该能够流复制到输出流按这个片段:

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

    Response.OutputStream.Write(buffer, 0, read); 
    Response.Flush(); 
} 
相关问题