美文网首页
前端文件下载总结

前端文件下载总结

作者: 沉默固执老阿姨 | 来源:发表于2023-07-25 16:32 被阅读0次

    1、通过post接口获取blob二进制流。js将获取到的blob转化成url.赋值给a标签,浏览器识别到blob格式的url,将自动下载数据。

    优点:token校验和参数将丢在body里面,无法抓包获取用户的token。

    缺点:通过post获取blob,因为是http网络请求,用户无法感知当前下载进度;需要下载的文件过大,再下载完全文件之前,浏览器会一直存储blob,导致越来越慢,有撑爆的可能;再下载完之前,用户刷新页面,会导致之前的存储的blob 丢失。

    axios请求设置:

    return service({

            url: '/xxxx/url',

            method: 'post',

            responseType: 'blob',//表明接受二进制流数据

            data   

    })

    下载代码:

    let url = window.URL.createObjectURL(new Blob([blob])) ;

    let link = document.createElement('a'); 

    link.download = 'xxx.png' ;

    link.style.display = 'none' ;

    link.href = url ;

    document.body.appendChild(link) ;

    link.click() ;

    document.body.removeChild(link) ;

    window.URL.revokeObjectURL(url);

    2、通过get方式下载文件

    优点:点击下载之后,浏览器将接管下载的流程,展示下载的进度。用户刷新不影响浏览器已经接管的任务。

    缺点:数据传参将附在url之上,抓包可能会获取到用户的token信息。

    export const downloadFileByUrlIframe = (url, triggerDelay, removeDelay) =>{

      setTimeout(() => {

        const iframe = document.createElement("iframe");

        iframe.style.display = "none";

        iframe.style.height = 0; 

        iframe.src = url;

        document.body.appendChild(iframe);

        setTimeout(() => {

          iframe.remove();

        }, removeDelay); 

    }, triggerDelay);}

    相关文章

      网友评论

          本文标题:前端文件下载总结

          本文链接:https://www.haomeiwen.com/subject/iucoartx.html