[問題] IE 不理會 TransmitFile 指令?
‧作業系統版本-Windows Server 2003
‧ASP.NET 版本-ASP.NET 2.050727
‧錯誤訊息與狀況描述-
我從網路上抓到一段下載檔案的程式碼,
該post推薦用TransmitFile可以享有優秀的效能與隱藏檔案實際 URL等優點。
// DownloadTest.aspx.cs 中的程式碼。
Response.Clear();
Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=img.jpg;");
Response.TransmitFile(@"img.jpg");
Response.End();
但測試時卻發現 IE 會跟這段程式碼打架@@
其中 DownloadTest.aspx 是下載檔案的網頁,直接連結是OK的。
但這個網頁若用 window.open() 去開啟,就沒有任何作用。
我用 DownloadPop.aspx 去開啟 DownloadTest.aspx,
點下去只會看到 DownloadTest.aspx 跳出來,閃一下就不見了~"~
之所以要開一個新視窗跳出來,
是因為下載檔案那段程式碼若不放在 Page_Load裡面跑就會秀逗,
要不是下載不下來,就是同function 中其他程式碼會變得無作用~"~
DownloadPop 頁面用 FireFox 或 Google Chrome 開啟都是OK的,可以成功下載檔案。
但 IE 的使用者又是最大宗,無法忽略這個問題….orz
後來我根據
http://stackoverflow.com/questions/4453533/response-transmitfilefilepath-fails-in-child-page-in-ie
(縮址為: http://ppt.cc/;w5j )
這個網頁的說法,進行了 Encode 的動作,但仍然失敗~"~
症狀跟原本的情況完全一樣... 用 window.open() 開啟就會失敗...
另外我們發現的蛛絲馬跡還有:
若到伺服器上使用 localhost 開啟,會成功!
但若使用 127.0.0.1 開啟,就會失敗~"~
難道localhost跟127.0.0.1不一樣嗎?
我馬上試著 ping localhost,解析出來的IP的確是127.0.0.1呀…
也不是打錯 IP,因為其他頁面開起來都好好的。
而在伺服器上使用 Debug 模式下中斷點,
會發現用 localhost 跟 127.0.0.1 都有正常進入 Page_Load 並跑完所有程式碼,
但 127.0.0.1 就是沒有檔案出來!
Response.Clear();
Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment;filename=img.jpg;");
Response.TransmitFile(@"img.jpg");
Response.Flush(); //使用localhost會在這一行就跳出下載檔案,但127.0.0.1啥都沒有
Response.End();
至此我已經認為大概是 IE 的bug了 orz
可是還是很多網站提供下載檔案的功能,用 IE 開都好好的呀! 大家到底都怎麼寫的??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.20.210.132
※ 編輯: PEIRON 來自: 211.20.210.132 (05/26 10:42)
討論串 (同標題文章)