導讀:很多時候,我們使用直連方式做下載,但是有時候會出現(xiàn)亂碼,這是為什么呢?
在網(wǎng)站上文件下載都是直接點擊文件聯(lián)接就行了,這種方法有幾個弊端:
(1) 有些文件不會下載會直接調(diào)用相應的程序打開該文件
(2)不能隱藏實際文件地址。
(3)不能夠從數(shù)據(jù)庫中動態(tài)讀取文件名進行改名下載
下面是asp.net,c#代碼:
string fileName; //文件在數(shù)據(jù)庫中的名稱
string dir ; //文件在服務器的物理路徑(如c:/aa/ddd/wj0000222.zdo)
long size ; //文件的大小
Response.AddHeader(”content-type”, “application/x-msdownload;”);
Response.AddHeader(”Content-Disposition”,”attachment;filename=” + fileName[自己定義的]);
Response.AddHeader(”content-length”, size.ToString());
Response.WriteFile(dir,0,size);
這種方法可以實現(xiàn)以上的目的,但是當文件名(fileName)為中文時在ie下載端顯示的是亂碼,那么如何解決這個問題呢。
其實上面給出的方法是可行的,但有局限性。關鍵在于UrlEncode這個東東,在下面不同情況下的結果是不一樣的
1)web.config 里responseEncoding=”gb2312″
2)web.config 里responseEncoding=”utf-8″
使用Server.UrlEncode的話必須responseEncoding=”utf-8″才會正確。 所以不要用Server.UrlEncode,換HttpUtility.UrlEncode:
string s=HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(”中文.txt”));
Response.AppendHeader(”Content-Disposition”, "attachment; filename=” + s);
新聞熱點
疑難解答
圖片精選