原來我們專案在開發時中(檔案是儲存在資料庫中)下載檔案採用寫入http頭的形式。如下Response.Clear();
Response.Buffer = false;
Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileWJNR.Rows[0]["WJM"].ToString(),System.Text.Encoding.UTF8));
Response.BinaryWrite(位元組流);
Response.End();
但在專案部署後,使用者的IE6.0瀏覽時,會被攔截,並關閉退出。當時同事用了彈出一個窗體,再在彈出的窗體中再“點擊下載”,這樣就不會被攔截。
我試了一個更直接的解決方法,就是點擊時,先生成臨時文件,再連結至臨時文件,即彈出文件下載或打開對話框。程式碼很簡單:
string fileName = "檔案名稱" //用檔案id
string tempFilePath = Request.PhysicalPath;
tempFilePath = tempFilePath.Substring(0,tempFilePath.LastIndexOf("\"));
tempFilePath += " \temp\ " + fileName;
FileStream file = new FileStream(tempFilePath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
try
{
byte[] docBody = (byte[])fileWJNR.Rows[0]["WJNR"]; //轉換
file.Write(docBody, 0, docBody.Length);
file.Close();
Response.Redirect("temp\" + fileName);
}
catch
{
file.Close();
}