下載文件的Restful接口的前端實現


背景介紹

  后端是springboot框架,接口是restful風格接口,需求是異步實現一個文件下載,該文件是動態生成的,以流的方式返回給前端。存在的問題是,ajax不支持post方式傳參數,並觸發瀏覽器下載文件。經過多方調研,JavaScript原生XMLHttpRequest()對象可以實現。這里呈現主要的前端代碼,以供參考,具體請參考XMLHttpRequest()的API文檔介紹https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

實現代碼

1、實現函數方法

 1 function download(options) {
 2         var xhr = new XMLHttpRequest();//創建新的XHR對象
 3         xhr.open(options.method, options.url);//指定獲取數據的方式和url地址
 4         xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8')
 5         xhr.responseType = 'blob';//以blob的形式接收數據,一般文件內容比較大
 6         // 定義請求完成的處理函數,請求前也可以增加加載框/禁用下載按鈕邏輯
 7         xhr.onload = function () {
 8             // 請求完成
 9             if (this.status === 200) {
10                 // 請求成功
11                 var blob = this.response;
12                 var reader = new FileReader();
13                 reader.readAsDataURL(blob);    // 轉換為base64,可以直接放入a表情href
14                 reader.onload = function (e) {
15                     // 轉換完成,創建一個a標簽用於下載
16                     var a = document.createElement('a');
17                     a.download = 'backendCode.zip';//下載的文件名
18                     a.href = e.target.result;
19                     $("body").append(a);    // 修復firefox中無法觸發click
20                     a.click();
21                     $(a).remove();
22                 }
23             }
24         };
25         xhr.send(options.data); //post請求傳的參數
26     }

2、參數設置

1 var options = {
2                 url: '/geneCode',  //下載地址
3                 data: requestDataStr, //要發送的數據
4                 method: 'post'//post方式發送數據
5             };

3、數據對象。

數據對象需要轉換成字符串類型,后端才可以反序列化,映射到指定的javabean。

1 var javaBean = {
2                 author: “Eric”
3             }
4 var requestDataStr = JSON.stringify(javaBean);    

結果

  在觸發下載的函數中,引用該函數,即可實現post方式異步下載文件,觸發瀏覽器的文件下載過程

 


免責聲明!

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



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