赞
踩
后端返回Blob对象(文件流),完成导出、下载功能:
1.介绍Blob
Blob
对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream
来用于数据操作。
下载文件分为两种形式,哪两种方式取决于后台;
window.location.href="http://www.域名/template.xlsx(文件名)"
第一步:引入axios
第三方库
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
第二步:传参、调接口,下载文件
返回数据是Blob对象
- axios.post(请求路径URL, {参数Params}, {
- responseType: 'blob'
- }).then(function(res){
- var blob = res.data;
- // FileReader主要用于将文件内容读入内存
- var reader = new FileReader();
- reader.readAsDataURL(blob);
- // onload当读取操作成功完成时调用
- reader.onload = function(e) {
- var a = document.createElement('a');
- // 获取文件名fileName
- var fileName = res.headers["content-disposition"].split("=");
- fileName = fileName[fileName.length - 1];
- fileName = fileName.replace(/"/g, "");
- a.download = fileName;
- a.href = e.target.result;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- }
- });
返回的数据是流文件:(流文件和Blob是不同的)
考虑到兼容IE等问题 最好采用下列的方式:
- let res = await proudctionApi.export_zjy(data);//获取数据
- let blob = this.getBlob(res.data);// 将数据转化为Blob对象
- let fileName = `日报${this.date}.xlsx`;// 设置文件名
- utils.saveAs(blob, fileName);
-
-
- //getBlob方法
- getBlob(data) {
- let blob = new Blob([data], {
- type: "application/vnd.ms-excel;charset=utf-8",
- });
- return blob;
- }
- //proudctionApi.export_zjy
- export function export_zjy(data) {
- return request({
- url: "/wellbore/com_daily/export_zjy",
- method: "post",
- data,
- responseType: 'blob' //必须设置返回数据类型 为blob
- });
- }
-
- //utils.save 方法如下:
- export const saveAs = (blob, filename) => {
- if (window.navigator.msSaveOrOpenBlob) {
- //IE保存Blob对象
- navigator.msSaveBlob(blob, filename)
- } else {
- //其他浏览器
- var link = document.createElement('a')
- var body = document.querySelector('body')
- /*window.URL.createObjectURL可以用于在浏览器上预览本地图片或者视频,创建一个url*/
- link.href = window.URL.createObjectURL(blob)//为Blob对象创建一个url地址
- link.download = filename
- /*
- 如果不设置download属性的话,呢么如果是jpg、txt等浏览器支持打开的属性,就会在浏览器打开该文件而不是下载下来
- */
-
- // fix Firefox
- link.style.display = 'none'
- body.appendChild(link)
-
- link.click()
- body.removeChild(link)
-
- window.URL.revokeObjectURL(link.href)// 释放地址
- }
- }
- var exportForm = $('<form action="/api/cert/download" method="post">\
- <input type="hidden" name="ids" value="'+参数ids值+'"/>\
- </form>');
- $(document.body).append(exportForm);
- exportForm.submit();
- exportForm.remove();
参考地址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。