js下载get请求返回的文件流(请求头携带token)

需求是下载请求接口返回的文件流

var xhh = new XMLHttpRequest();
xhh.open("get", baseUrl+'/cert/download?name='+name );
 xhh.setRequestHeader("Authorization", "Bearer "+token);
 xhh.setRequestHeader("Content-Type","application/json");
 xhh.responseType = 'blob';
 // xhh.onreadystatechange = function () {
 //     if (xhh.readyState === 4 && xhh.status === 200) {
 //         var mimeType = xhh.getResponseHeader("ajax-mimeType");
 //         var blob = new Blob([xhh.response], {type: mimeType});
 //         var csvUrl = URL.createObjectURL(blob);
 //         var link = document.createElement('a');
 //         document.body.appendChild(link); //创建的标签添加到body,解决Firefox下无法打开页面的问题
 //         link.href = csvUrl;
 //         link.target = '_blank';
 //         link.id = 'linkId',
 //         link.className = 'linkId',
 //         link.download = fileName;
 //         document.getElementById("linkId").click();
 //         // link.remove(); //将a标签移除
 //         $('.linkId').remove()
 //     }
 // };
 xhh.onload = function () {
     // 请求完成
     if (this.status === 200) {
         // 返回200
         var blob = this.response;
         var reader = new FileReader();
         reader.readAsDataURL(blob);    // 转换为base64,可以直接放入a表情href
         reader.onload = function (e) {
             // 转换完成,创建一个a标签用于下载
             var a = document.createElement('a');
             a.download = fileName;
             a.href = e.target.result;
             $("body").append(a);    // 修复firefox中无法触发click
             a.click();
             $(a).remove();
         }
     }
 };
 xhh.send();

以上经测试是可行的;

原文链接:
https://blog.csdn.net/swl979623074/article/details/77855629/
https://segmentfault.com/q/1010000015746494

你可能感兴趣的:(js,前端)