HttpServletResponse文件下載


案例-完成文件下載

先創建一個文件夾叫download

然后在文件里創建幾個例子文件

 

 

 然后這個文件夾復制到你的Webcontion下去

 

 

 然后在Webcontion上創建一個jsp,叫download

 

 

 除了能在標簽種能設置post請求以外的所有的標簽都是get請求,就是不能設置post請求的標簽都是get請求

所以a標簽就是個get請求

因為是get請求所以這個filename就是所帶的參數 讓他服務器知道顧客點的是那個 所給出相應的資源

 

 

 

 然后在src下創建一個包叫com.oracle.demo01在創建一個Servlet叫DownloadServlet

 

 

 然后在jsp寫

 

 

 重啟服務器顯示出

a.png

 

 

a.txt

 

 是亂碼

a.wmv和a.rar都是直接下載

 

 游覽器能解析的就直接打開 不能解析的就提供下載

 

 

上述代碼可以將圖片從服務器端傳輸到瀏覽器,但瀏覽器直接解析圖片顯示在頁面上, 而不是提供下載,我們需要設置兩個響應頭,告知瀏覽器文件的類型和文件的打開方 式。

1)告知瀏覽器文件的類型:response.setContentType(文件的MIME類型);

2)告示瀏覽器文件的打開方式是下載:

response.setHeader("Content-Disposition","attachment;filename=文件名稱");

 

 寫完后重啟服務器顯示:

 

 然后在做一個實例

 右鍵你的圖片改成中文名字

 

 然后之前jsp的也改成小狗

 

 改完后再重啟服務器測試發現

 

 這樣的話下載是沒有問題的,但是因為碼表的問題中文亂碼所以名字不顯示,為了改正這種情況

 

但是,如果下載中文文件,頁面在下載時會出現中文亂碼或不能顯示文件名的情況, 原因是不同的瀏覽器默認對下載文件的編碼方式不同,ie是UTF-8編碼方式,而火狐 瀏覽器是Base64編碼方式。所里這里需要解決瀏覽器兼容性問題,解決瀏覽器兼容 性問題的首要任務是要辨別訪問者是ie還是火狐(其他),通過Http請求體中的一 個屬性可以辨別

 

 

 

解決亂碼方法如下(不要記憶--了解):

String filenameEncoder=””;

if (agent.contains("MSIE")) {

// IE瀏覽器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

filenameEncoder= filenameEncoder.replace("+", " ");

} else if (agent.contains("Firefox")) {

// 火狐瀏覽器

BASE64Encoder base64Encoder = new BASE64Encoder();

filenameEncoder= "=?utf-8?B?"

+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

// 其它瀏覽器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

}

 

其中agent就是請求頭User-Agent的值

代碼如下

 

 運行結果:

 

 一次性驗證碼

 

 解壓到

 

 把CheckImgServlet復制到src里的demo01下 在把包名改了

 

 

 

 在把new_words復制到WEB-INF下

 

 在設置你的web-xml

 

 運行出現

在webcontion創建一個jsp

 

 

 

 點一下刷新一張圖片

 

response細節點:

  1. response獲得的流不需要手動關閉,web容器(tomcat容器)會幫助我們關閉,
  2. getWriter和getOutputStream不能同時調用
  3. 重定向語句一般作為終結代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM