02vue+axios+form實現檔案下載(附Java實現程式碼)
1.0前端實現思路
用一個from接收後臺返回的檔案流。form用display為none隱藏;其中form構造action屬性,屬性值為後臺檔案下載的引數。同樣可以用display為none的input插入form中,input可以攜帶引數,後臺可以用@requestParam接收。
前端具體程式碼如下:
<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title></head><body> <div id="app" class="m-5"> <input type="button" value="下載" @click="handlerClick"> </div> <script> new Vue({ el: '#app', data: { files: [] }, methods: { handlerClick: function () { //自定義form標籤,初始化相關引數 var form = document.createElement("form"); var access_token = "1756467474"; form.setAttribute("style", "display:none"); form.setAttribute("method", "get"); var params = {}; params.Authorization = access_token; form.setAttribute("header", params); var path = 'E:\_ex_workplace\zxsbWeb\esgov-zxsb-zxsbweb\src\pages\selfDetection.vue'; var input = document.createElement('input'); input.setAttribute('type', 'hidden'); input.setAttribute('name', 'path'); input.setAttribute('value', path); form.append(input); form.setAttribute("action", "" ); form.setAttribute("target", "_blank"); var body = document.createElement("body"); body.setAttribute("style", "display:none"); document.body.appendChild(form); form.submit(); form.remove(); } } </script></body></html>
02.java程式碼實現
後端Java程式碼實現首先將檔案讀入到陣列buffer中,然後用response獲取輸出流,輸出流將buffer寫出即可。
@GetMapping("/download") public void download(@RequestParam("path") String path, HttpServletResponse response) { System.out.println(path); try { // path是指欲下載的檔案的路徑。 File file = new File(path); // 取得檔名。 String filename = file.getName(); // 取得檔案的字尾名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); // 以流的形式下載檔案。 InputStream fis; fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 設定response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes())); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); } }
作者:exmexm
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2894/viewspace-2815498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java實現檔案下載功能Java
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- java實現檔案的下載的方法概述Java
- 使用Servlet實現檔案下載Servlet
- Flutter 實現檔案下載功能Flutter
- vc實現https檔案下載HTTP
- Java實現多檔案邊壓縮邊下載Java
- Java多執行緒檔案分片下載實現Java執行緒
- js實現txt/excel檔案下載JSExcel
- 2020JavaWeb實現檔案下載JavaWeb
- Feign實現檔案上傳下載
- js下載檔案的實現方式JS
- java程式碼實現excel檔案資料匯入JavaExcel
- JavaWeb之實現檔案上傳與下載原始碼JavaWeb原始碼
- SpringMVC實現檔案上傳&下載(2)SpringMVC
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- 驚了!7 行程式碼優雅地實現 Excel 檔案生成&下載功能行程Excel
- 前端實現檔案下載和拖拽上傳前端
- .netcore+vue 實現壓縮檔案下載NetCoreVue
- Java實現檔案切割拼接Java
- javaWeb不生成臨時檔案實現壓縮檔案下載JavaWeb
- iis實現點選檔案下載而不是開啟檔案
- Vue實現點選按鈕進行檔案下載(後端Java)Vue後端Java
- React中使用fetch實現檔案上傳下載React
- Javascript 實現一個post方式的檔案下載JavaScript
- OSS實現檔案下載進度條顯示
- Python使用socket_TCP實現小檔案下載PythonTCP
- vue實現Excel檔案的上傳與下載VueExcel
- JavaWeb之實現檔案上傳與下載工具JavaWeb
- JavaWeb之實現檔案上傳與下載元件JavaWeb元件
- JavaWeb之實現檔案上傳與下載示例JavaWeb
- flutter使用dio實現 檔案下載並實現進度監聽總結Flutter
- java快速實現匯出生成csv檔案(含註釋程式碼)Java
- 從【抓包分析】到【程式碼實戰】,實現下載某破站影片(附原始碼)原始碼
- js實現使用檔案流下載csv檔案JS
- [原始碼和文件分享]基於WinInet的FTP檔案下載實現原始碼FTP
- 70 行 python 程式碼實現桌布批量下載Python