2009-07-20 43 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(); 
} 
相關問題