剛剛申請的時候還是非常急切地想知道,什麼時候能收到管理員同意自己開通的通知,沒想到剛一收到的時候,自己開始糾結第一篇文章寫點什麼。我想,不如來分享自己的一小段代碼吧?1 var Response = HttpContext.Current.Response;2 Response.ContentTyp...
剛剛申請的時候還是非常急切地想知道,什麼時候能收到管理員同意自己開通的通知,沒想到剛一收到的時候,自己開始糾結第一篇文章寫點什麼。我想,不如來分享自己的一小段代碼吧?
1 var Response = HttpContext.Current.Response; 2 Response.ContentType = "application/octet-stream"; 3 Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName.Substring(0, FileName.Length - 5) + ".doc"); 4 Response.WriteFile(backup_file);//backup_file 是之前定義好的文件名。
其實這個很簡單,但是我研究了很久,自己思考的也挺亂的。
我先想到改HttpContext.Current.Response(以下簡稱Response)的ContentType屬性為"application/msword",然後使用Response的WriteFile()方法來把文件寫入Http響應當中。結果失敗了,操作完成後(首頁一個按鈕提交文件給此Handler.ashx,經過處理後形成一個word文檔)瀏覽器下載了Handler.ashx文件,打開是亂碼,從大小估計,應該這就是我所要的文件了,只不過文件名和拓展名都不是我想要的而已。
於是我在百度上找到了一篇文章,提到這個使用Response告知瀏覽器下載文件時,Response的ContentType應該是:"application/octet-stream",同樣使用了Response.WriteFile()方法後,得到的就是我想要的文件了。
同時值得一提的是,上面我是用的backup_file變數,它的值實際上是文件在我的主機上的物理路徑,把這個路徑給了該方法,才成功實現了需求。
在tool.oschina.net/commons的HTTP ContentType查詢中,我得到的結果是:
.*( 二進位流,不知道下載文件類型) | application/octet-stream |
我所輸出的其實是這樣一個二進位流。