推薦文件下載萬能通用方式(JAVA實現超級好用)

推薦文件下載萬能通用方式(JAVA實現超級好用)

前言

想必做過java開發的同學們都知道,後臺系統經常會用到一些文件上傳下載之類的功能,在做這些需求的時候往往會遇到很多坑,什麼文件下載亂碼啊,文件名被瀏覽器錯誤識別啊等等,下面是本人總結的一些工作經驗,僅以java下載文件源碼為例:

附上偽代碼:

/**
\t * response 方式下載文件
\t * 親測 chorme firBox exploy 及蘋果瀏覽器均支持
\t * @param fileName
\t * @param request
\t * @param response
\t */
\t@RequestMapping("downLoadFile")
\tpublic void getDownLoad(String fileName, HttpServletRequest request, HttpServletResponse response) {
\t\tresponse.reset();
\t\t// 設置文件下載的格式 這種是讓瀏覽器自己去識別文件格式
\t\tresponse.setContentType("application/octet-stream");
//文件名 怎麼獲取就不用多說了吧
\t\tString fileName2 = fileName;
\t\ttry {
\t\t\tString userAgent = request.getHeader("User-Agent");
\t\t\t// name.getBytes("UTF-8")處理safari的亂碼問題
\t\t\tbyte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8");
\t\t\t// 各瀏覽器基本都支持ISO編碼
\t\t\tfileName = new String(bytes, "ISO-8859-1");

\t\t\t// 文件名外的雙引號處理firefox的空格截斷問題
\t\t\tresponse.setHeader("Content-disposition", String.format("attachment; filename=\\"%s\\"", fileName));
\t\t} catch (UnsupportedEncodingException e1) {
\t\t\te1.printStackTrace();
\t\t}
\t\tInputStream in = null;
\t\tOutputStream out = null;
\t\ttry {
//TODO你只需要在這裡獲取到你所要下載的文件的輸入流

//以下輸入流讀到輸出流中寫回瀏覽器
\t\t\tint len = 0;
\t\t\tbyte bys[] = new byte[1024];
\t\t\tout = response.getOutputStream();
\t\t\twhile ((len = in.read(bys)) > 0) {
\t\t\t\tout.write(bys, 0, len);
\t\t\t}
\t\t\tout.close();
\t\t\tout.flush();
//完成 後 關閉流
\t\t} catch (IOException e) {
\t\t\te.printStackTrace();
\t\t} finally {
\t\t\tif (in != null) {
\t\t\t\ttry {
\t\t\t\t\tin.close();
\t\t\t\t} catch (Exception e) {
\t\t\t\t\te.printStackTrace();
\t\t\t\t}
\t\t\t}
\t\t}
\t}

總結:

以上僅是我個人在實施過程中的經驗代碼總結,個人測試各個瀏覽器都支持,並且已在線上運行1年多,以後遇到類似的需求基本上不需要再查詢資料,拿過來就可以用了,如果你絕的有用可以試一下,好用的話收藏,有什麼問題可能我個人能力有限,希望大家多多指教,創建這個賬號的目的就是記錄自己的成長,同時傳播個人成長經歷,有喜歡的可以關注我,我們互相進步

提示:

文件上傳,實時進度監聽等,參考:


分享到:


相關文章: