亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JavaEE實現文件下載

2019-11-26 15:22:54
字體:
來源:轉載
供稿:網友

 我們先來看一個最簡單的文件下載的例子:

復制代碼 代碼如下:

 package com.yyz.response;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 //文件下載
 public class ResponseDemo extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         String realpath = this.getServletContext().getRealPath("/download/1.gif");
         String filename = realpath.substring(realpath.lastIndexOf("//")+1);
         response.setHeader("content-disposition", "attachment;filename="+filename);
         //服務器通過這個頭,告訴瀏覽器以下載方式打開數據
         FileInputStream in = new FileInputStream(realpath);
         int len = 0;
         byte buffer[]=new byte[1024];
         OutputStream out = response.getOutputStream();
         while((len = in.read(buffer))>0){
             out.write(buffer, 0, len);
             }
         in.close();
         //out不用close,response在銷毀的時候服務器會自動關閉與response相關的流。
 }
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
            doGet(request,response);
     }
 }

 該段代碼的功能是從服務器端下載圖片1.png。目錄結構用MyEclipse的package explorer顯示如下:

  讓我們增加一點難度,我們要下載的文件是一個中文名字的文件。由于在http協議中頭文件中的東西只能是ASCII字符,因而通過上述方式(直接將  String realpath = this.getServletContext().getRealPath("/download/1.gif");改為  String realpath = this.getServletContext().getRealPath("/download/圖片.gif");)直接拿文件,

會出現亂碼問題。附上測試結果:

  要解決這個問題,要用到 URLEncoder類的encode方法:

復制代碼 代碼如下:

 package com.yyz.response;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URLEncoder;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 //中文文件下載時,中文文件名要經過URL編碼。
 public class ResponseDemo extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         String realpath = this.getServletContext().getRealPath("/download/圖片.gif");
         String filename = realpath.substring(realpath.lastIndexOf("//")+1);
         response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
        //本函數將字符串以 URL 編碼
         FileInputStream in = new FileInputStream(realpath);
         int len = 0;
         byte buffer[]=new byte[1024];
         OutputStream out = response.getOutputStream();
         while((len = in.read(buffer))>0){
             out.write(buffer, 0, len);
             }
         in.close();
 }
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
            doGet(request,response);
     }
 }

 附上測試結果:

    另外這里有一個小細節需要大家注意:

   不能用FileReader代替FileInputStream。用FileReader會丟失數據,原因是這樣的:FileReader是字符流,而圖片,媒體文件等的數據都是以01的方式存儲,用FileReader讀的時候需要查閱一個編碼表,如果未指定一種編碼,則使用相應平臺的默認編碼。如在中國的電腦就會去查GB2312。當讀到GB2312碼表中不存在的編碼時,會將該數據編碼成'?',結束后數據就變成中文和'?'的混合。發到客戶端后顯示時再次查閱碼表,將所有的'?'替換成'?'的編碼,就會丟失數據。向這種細節只需要記住一點:字節流可以處理任意類型的數據,字符流只能處理字符數據。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97成人超碰免| 久久免费观看视频| 萌白酱国产一区二区| 日韩精品在线视频观看| 日韩成人高清在线| 亚洲一级片在线看| 国产精品丝袜久久久久久高清| 国产精品白丝jk喷水视频一区| 欧美日韩中文字幕在线| 成人欧美在线视频| 国色天香2019中文字幕在线观看| 性色av一区二区三区在线观看| 色av中文字幕一区| 欧美午夜影院在线视频| 伊人成人开心激情综合网| 麻豆一区二区在线观看| 欧美一级淫片播放口| 最近2019中文字幕在线高清| 美女黄色丝袜一区| 97久久超碰福利国产精品…| 欧美大片欧美激情性色a∨久久| 国产日韩精品综合网站| 亚洲精品乱码久久久久久金桔影视| 国产日韩在线视频| 欧美极品少妇xxxxⅹ喷水| 国产午夜精品一区理论片飘花| 欧美黑人性视频| 国产精品主播视频| 亚洲第一页中文字幕| 亚洲影院色在线观看免费| 日韩视频免费观看| 欧美激情免费观看| 欧美高清一级大片| 精品亚洲va在线va天堂资源站| 国产精品一久久香蕉国产线看观看| 91精品在线一区| 国产精品色婷婷视频| 精品亚洲一区二区三区四区五区| 亚洲欧美日韩第一区| 亚洲自拍欧美色图| 两个人的视频www国产精品| 黄色一区二区在线| 精品亚洲一区二区| 91精品久久久久久久久不口人| 亚洲国产精品久久91精品| 亚洲系列中文字幕| 国模叶桐国产精品一区| 在线观看日韩www视频免费| 国产精品一区二区电影| www.日韩不卡电影av| 欧美黑人视频一区| 成人福利免费观看| 3344国产精品免费看| 97在线视频免费播放| 亚洲免费精彩视频| 亚洲第一精品夜夜躁人人爽| 欧美中文字幕在线视频| 精品久久久久久| 亚洲午夜小视频| 热久久美女精品天天吊色| 久热精品视频在线观看一区| 欧美电影《睫毛膏》| 午夜精品免费视频| 91夜夜揉人人捏人人添红杏| 91久久久久久国产精品| 亚洲无线码在线一区观看| 色99之美女主播在线视频| 精品亚洲男同gayvideo网站| 在线不卡国产精品| 亚洲欧洲在线视频| 欧美激情videos| 中文字幕日韩精品在线观看| 国产亚洲精品日韩| 亚洲资源在线看| 国产69精品久久久久9| 2018中文字幕一区二区三区| 日韩高清中文字幕| 日韩中文字幕视频在线观看| 国产日产久久高清欧美一区| 欧美国产日韩一区| 在线观看成人黄色| 亚洲一区二区中文字幕| 亚洲国产精品久久久久久| 91在线免费看网站| 久久成人精品电影| 8090理伦午夜在线电影| 欧美成人午夜影院| 成人免费在线视频网站| 午夜免费在线观看精品视频| 亚洲欧美日韩高清| 日韩av免费看网站| 欧美成人免费观看| 91在线视频免费| 国内精品久久久久久中文字幕| www.欧美精品一二三区| 亚洲第一福利在线观看| 国产精品久久久久久亚洲调教| 欧美老女人性视频| 欧美三级xxx| www日韩中文字幕在线看| 97免费中文视频在线观看| 国产精品一二区| 热门国产精品亚洲第一区在线| 日韩电视剧免费观看网站| 欧美性猛交xxxx免费看久久久| 久久天天躁狠狠躁夜夜躁2014| 欧美理论片在线观看| 97超级碰碰人国产在线观看| 久久久久免费视频| 亚洲视频欧洲视频| 91精品视频在线| 国产一区二区三区日韩欧美| 久久精品国产亚洲精品| 亚洲成av人影院在线观看| 国产亚洲欧美视频| 国产网站欧美日韩免费精品在线观看| 久久精品人人爽| 国产99久久精品一区二区| 91精品国产色综合| 欧美日韩亚洲天堂| 热久久这里只有精品| 日韩成人在线视频| 国模叶桐国产精品一区| 中日韩美女免费视频网址在线观看| 精品av在线播放| 国产91精品最新在线播放| 国产精品直播网红| 日韩**中文字幕毛片| 日韩在线小视频| 在线播放国产一区二区三区| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久久久app| 久久综合伊人77777尤物| 777午夜精品福利在线观看| 欧美壮男野外gaytube| 亚洲国产古装精品网站| 久久久久久国产精品美女| 国产一区二区三区直播精品电影| 亚洲一区二区久久| 日产精品久久久一区二区福利| 久久人91精品久久久久久不卡| 亚洲精品免费一区二区三区| 国产亚洲一区二区精品| 欧美亚州一区二区三区| 欧美日韩福利在线观看| 欧美日韩国产丝袜另类| 中文字幕亚洲综合| 国产精品网红福利| 91免费在线视频网站| 国产精品成人一区| 日韩免费av片在线观看| 国产精品美女午夜av| 国产精品久久久久9999| 亚洲精品美女免费| 亚洲男人天堂视频| 亚洲第一福利在线观看| 亚洲精品福利资源站| 欧美高清在线视频观看不卡| 亚洲欧美在线免费观看| 国产精品女主播| 国产成人精品视频在线观看| 毛片精品免费在线观看| 色综合久久中文字幕综合网小说| 亚洲精品久久久久国产|