2011-09-29 38 views
0

嗨我想給用戶發送一個文件,但不顯示網址。ASP.NET MVC文件方法

使用File方法的問題是,我有我的文件在另一臺服務器,所以我只有url不是一個虛擬路徑,我試圖使用WebClient獲取File方法中使用的文件字節,但它很慢,我的文件大於20 Mb!

關於如何在不將所有文件字節發送給我的用戶之前完成此操作的任何想法?

這是我的代碼我的控制器內:

  using (WebClient Client = new WebClient()) 
      { 
       byte[] fileContent = Client.DownloadData(fileUrl); 

       return File(fileContent, "application/octet-stream", fileName); 
      } 

感謝

回答

0

您可以使用Response.BinaryWrite二進制數據寫入到輸出流。

如果需要,可以在多個塊中完成此操作,然後在完成時刷新並結束響應。

+0

我想將文件發送給用戶而不是在本地保存文件。我的文件Web服務器擁有所有文件,我的應用程序必須發送給用戶這些文件,而不顯示他們的網址。 – JasonMenny

+0

@JasonMenny抱歉誤會。已經更新了答案。 – Timbo

2

您可以以塊的形式讀取服務器,並將它們直接寫入輸出流。玩塊大小來調整性能。

using (var client = new WebClient()) { 
    using (Stream data = client.OpenRead(fileUrl)) { 
     using (var reader = new BinaryReader(data)) { 
      var buffer = new byte[8192]; 
      int nread; 
      while ((nread = reader.Read(buffer, 0, buffer.Length)) > 0) 
       Response.OutputStream.Write(buffer, 0, nread); 
     } 
    } 
} 
return null;