前端使用Fetch调用后端Restful接口实现下载

主要记录有两种方式;一种是dataURL的方式,一种是Blob方式;听说dataURL文件大小有限制,但我目前在chrome上用245M的zip文件也没问题;Blob是一种更加被广泛支持的特性,基本没什么限制;
1. dataUrl的方式

function xiazai() {
            fetch('/application/xiazai', {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                credentials: "same-origin"
            }).then((resp) => {
                resp.json().then((bodyData)=>{
                    //encodeURIComponent解决中文乱码
                    let uri = 'data:application/zip;base64,' +     encodeURIComponent(bodyData.data);
                    //通过创建a标签实现
                    var link = document.createElement("a");
                    link.href = uri;
                    //对下载的文件命名
                    link.download =  "json数据表.zip";
                    document.body.appendChild(link);
                    link.click();
                    document.body.removeChild(link);
                });
            }, (err) => {
                console.log(err);
            })
        }

2. Blob的方式

function blobFile() {
            fetch('/application/xiazai', {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                credentials: "same-origin"
            }).then((resp) => {
                resp.json().then((bodyData) => {
                    getFile(bodyData.data, "我的xiao狗.zip");

                });
            }, (err) => {
                console.log(err);
            })

        }


        function getFile(base64, fileName) {
            var bytes=window.atob(base64),
            n = bytes.length,
            u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bytes.charCodeAt(n);
            }
            let blob = null;
            if (!window.Blob)
                alert("当前浏览器不支持该Blob,请升级浏览器或使用Chrome浏览器")
            else
                blob = new Blob([u8arr]);

            if (window.navigator.msSaveOrOpenBlob) {
                navigator.msSaveBlob(url.src, url.name);
            } else {
                var link = document.createElement("a");
                link.setAttribute("href", window.URL.createObjectURL(blob));
                link.setAttribute("download", fileName);
                document.body.appendChild(link);
                link.click();
                link.remove();
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值