2011-06-30 80 views
9

我在我的頁面中有一個下載鏈接,該文件是由用戶請求生成的文件。現在我想顯示文件大小,所以瀏覽器可以顯示剩下多少錢下載。作爲一個解決方案,我想插入一個標題的請求會起作用,但現在我不知道該怎麼做。如何在ASP.NET MVC 3的HTTPContext響應中添加標題?

這是我嘗試代碼:

public FileStreamResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
     { 

       SignalRepository sr = new SignalRepository(); 
       var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 
       Stream stream = new MemoryStream(file); 

       HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

       return File(stream, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 


     } 

當我上的提琴手檢查,它沒有顯示Content-Length頭。你們能幫我嗎?

回答

11

嘗試HttpContext.Current.Response.AppendHeader("Content-Length", contentLength);

+0

電流不裏面的HttpContext存在。 –

+1

好的,那麼就省略'Current'。只需在原始代碼中使用'AppendHeader'而不是'AddHeader'。 – Mrchief

0

不知道還有什麼可能是錯誤的存在,但內容長度應該是二進制文件的大小,而不是字符串的長度。

+0

實際上,長度應該是流的長度,這將是二進制的長度,對嗎? –

+0

@Mikael ...........是 – heisenberg

3

你可以請嘗試下面的代碼,看看是否有用?

public FileStreamResult Index() 
{ 
    HttpContext.Response.AddHeader("test", "val"); 
    var file = System.IO.File.Open(Server.MapPath("~/Web.config"), FileMode.Open); 
    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 
    return File(file, "text", "Web.config"); 
} 

「它的工作原理在我的機器上」

而且我沒有Content-length頭嘗試和提琴手反正報告內容長度標題。我不認爲這是必要的。

+0

你的例子工作,但當我生成我的文件,它不會發生。 ;/ –

+0

你是否檢查過流實際包含任何東西? 'sr.GetRecordFile(..)'返回一個'byte []',對嗎? –

0

這應該解決它,因爲我認爲沒有必要使用FileStreamResult,當你可以直接使用byte[]

public FileContentResult DownloadSignalRecord(long id, long powerPlantID, long generatingUnitID) 
{ 
    SignalRepository sr = new SignalRepository(); 
    var file = sr.GetRecordFile(powerPlantID, generatingUnitID, id); 

    HttpContext.Response.AddHeader("Content-Length", file.Length.ToString()); 

    return File(file, "binary/RFX", sr.GetRecordName(powerPlantID, generatingUnitID, id) + ".rfx"); 
} 

注意FileContentResult返回類型。

10

嘗試使用

HttpContext.Response.Headers.add("Content-Length", file.Length.ToString()); 
相關問題