我使用filestream.write
將數據從服務器傳輸到客戶端以進行下載。在那種情況下,發生的事情是我可以下載文件,但它不會在我的瀏覽器中顯示爲下載。 「下載」部分中不會顯示「另存爲」彈出窗口,也不會顯示「下載欄」。從環顧四周,我想我需要在響應頭中包含「something」來告訴瀏覽器這個響應有附件。另外我想設置cookie。要做到這一點,這是我在做什麼:在asp.net/mvc中的控制器內的操作中向http響應添加標頭
[HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)]
public ActionResult Download(string name)
{
// some more code to get data in inputstream.
using (FileStream fs = System.IO.File.OpenWrite(TargetFile))
{
byte[] buffer = new byte[SegmentSize];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, SegmentSize)) > 0)
{
fs.WriteAsync(buffer, 0, bytesRead);
}
}
}
return RedirectToAction("Index");
}
我得到錯誤:「System.web.httpcontext.current是一個屬性,作爲一個類型。」
我在正確的地方更新標題嗎?有沒有其他方法可以做到這一點?
我試着這樣做。但它在瀏覽器的下載部分既不顯示「另存爲」對話框,也不顯示下載進度條。 – ezile
這對我有用,我看到在我的測試用例中下載的視圖html。對你而言,這可能是因爲你正在重定向到行動。雖然我沒有嘗試過這種情況。只需嘗試將此標題置於索引下即可。 – PSL
我會詳細一點。我在「索引」頁面,然後點擊下載,然後通過JavaScript調用下載操作。上面的代碼是在下載操作中編寫的。將文件傳輸給用戶後,我重定向到索引頁面。我很困惑,因爲我應該在什麼時候告訴瀏覽器有下載。我的意思是我使用FileStream.WriteSync發送這些東西,所以我想在發送文件之前告訴瀏覽器有一個附件,因此它會彈出「另存爲」對話框。我認爲我對這裏的工作流程感到困惑,因此不應該在何時何地進行改變。 – ezile