成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

java實現(xiàn)瀏覽器下載文件,并解決兼容各瀏覽器的文件下載中文亂碼

tunny / 994人閱讀

摘要:瀏覽器下載代碼如下通過循環(huán)將讀入的文件的內(nèi)容輸出到瀏覽器中如果文件名為中文,上面的代碼下載的文件名會亂碼。解決中文亂碼方法拿到瀏覽器請求的判斷是否包含,是則直接講文件名轉(zhuǎn)換為,否則使用轉(zhuǎn)換。

場景描述:
由于項目需求,需要支持瀏覽器下載文件,比如招聘網(wǎng)站的在線簡歷下載。

瀏覽器下載代碼如下:
    public static void downloadFile(File file, HttpServletResponse response) {
        InputStream fin = null;
        ServletOutputStream out = null;
        try {
              fin = new FileInputStream(file);
              out = response.getOutputStream;
              response.setCharacterEncoding("utf-8");
              response.setContentType("application/x-download");
              response.addHeader("Content-Disposition", "attachment;filename=resume.doc");
     
              byte[] buffer = new byte[1024];
              int bytesToRead = -1;
              // 通過循環(huán)將讀入的Word文件的內(nèi)容輸出到瀏覽器中
              while((bytesToRead = fin.read(buffer)) != -1) {
                   out.write(buffer, 0, bytesToRead);
               }
           } catch (Exception e) {
              e.printStackTrace();
           } finally {
              if(fin != null) fin.close();
              if(out != null) out.close();
             
        }
    }

如果文件名為中文,上面的代碼下載的文件名會亂碼。

解決中文亂碼方法:
拿到瀏覽器請求的usreAgent,判斷是否包含MSIE,是則直接講文件名轉(zhuǎn)換為bytes,否則使用UTF-8轉(zhuǎn)換。
然后將bytes使用ISO-8859-1編碼轉(zhuǎn)換為字符串,返回到瀏覽器。

代碼如下:
public class DownloadServlet extends HttpServlet {  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // codes..  
        String name = "中文名 帶空格 的測試文件.txt";  
        String userAgent = request.getHeader("User-Agent"); 
        // name.getBytes("UTF-8")處理safari的亂碼問題 
        byte[] bytes = userAgent.contains("MSIE") ? name.getBytes() : name.getBytes("UTF-8");                     
        // 各瀏覽器基本都支持ISO編碼
        name = new String(bytes, "ISO-8859-1");  
        // 文件名外的雙引號處理firefox的空格截斷問題 
        response.setHeader("Content-disposition", String.format("attachment; filename="%s"", name));   
        // codes..  
    }  
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/70140.html

相關(guān)文章

  • Servlet第三篇【request和response簡介、response常見應(yīng)用】

    摘要:什么是對象響應(yīng)由狀態(tài)行實體內(nèi)容消息頭一個空行組成。為什么使用方法能夠正常向瀏覽器輸出中文呢你好呀我是中國這句代碼在轉(zhuǎn)成數(shù)組的時候默認查的是編碼,而你好呀我是中國支持編碼,所以可以正常顯示出來。 response、request對象 Tomcat收到客戶端的http請求,會針對每一次請求,分別創(chuàng)建一個代表請求的request對象、和代表響應(yīng)的response對象 既然request對象...

    Youngs 評論0 收藏0
  • 覽器下載文件名不亂碼解決辦法

    摘要:在項目中發(fā)現(xiàn),使用下載中文名文件的時候,下載的文件名是亂碼的問題。但是這個問題在,,中是沒有的。原先以為是的,但是細細研究之下你會發(fā)現(xiàn)這個簡單的文件下載問題在協(xié)議里經(jīng)歷了多少波折。 在項目中發(fā)現(xiàn),使用Safari下載中文名文件的時候,下載的文件名是亂碼的問題。但是這個問題在IE,F(xiàn)irefox,Chrome中是沒有的。原先以為是Safari的bug,但是細細研究之下你會發(fā)現(xiàn)這個簡單的文...

    VishKozus 評論0 收藏0
  • Java文件上傳細講

    摘要:代碼量也的確減少很多也能夠獲取普通字段的參數(shù)上傳文件名的中文亂碼和上傳數(shù)據(jù)的中文亂碼我把文件名改成中文,就亂碼了表單提交過來的中文數(shù)據(jù)也亂碼了。 什么是文件上傳? 文件上傳就是把用戶的信息保存起來。 為什么需要文件上傳? 在用戶注冊的時候,可能需要用戶提交照片。那么這張照片就應(yīng)該要進行保存。 上傳組件(工具) 為什么我們要使用上傳工具? 為啥我們需要上傳組件呢?當我們要獲取客戶端的數(shù)據(jù)...

    soasme 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<