美文网首页
文件下载的几种方式

文件下载的几种方式

作者: acf8e51ec9a3 | 来源:发表于2019-06-12 18:10 被阅读0次

    后端下载


    向后端发起下载请求,将请求返回的内容通过浏览器下载到本地

    通过a标签下载


    eg:

      <a href="123.jpg" download>点击下载</a>

      <a href="123.jpg" download="text.jpg">点击下载</a>

    a标签的href属性值为下载链接,点击链接时如果链接对应地址为浏览器可识别文件时,例如,图片,pdf等时,会直接打开文件,而不会下载。设置download属性后,可在点击链接时下载图片,pdf等文件。

    download属性值可为任意文件名称,表示下载文件的命名。

    如果需要下载的资源是跨域的,包括跨子域,在Chrome浏览器下,使用download属性是可以下载的,但是,并不能重置下载的文件的命名;而FireFox浏览器下,则download属性是无效的,也就是FireFox浏览器无论如何都不支持跨域资源的download属性下载。而,如果资源是同域名的,则两个浏览器都是畅通无阻的下载,不会出现下载变浏览的情况。

     在不使用download属性的情况下,后端需要配置

    header("Content-type: image/jpeg");

    header("Content-Disposition: attachment; filename='download.jpg'");

    来支持下载

    通过window.open(url)方法下载


    该方法相当于通过浏览器向服务器端发起get请求获取资源

    通过form表单提交方式下载


    创建一个form表单,将要上传的数据塞入form表单,触发表单的提交

    这种上传方式主要用于需要提交给下载接口的参数太多而get请求无法支持的场景


    前端下载


    不需要从服务器上获取下载资源,而是将内存中已有的数据下载到本地的下载方式

    将要下载的内容包装成Blob对象,Blob对象可以通过window.URL对象生成一个网络地址,通过该地址来下载资源

    Blob对象可以看做是存放二进制数据的容器,此外还可以通过Blob设置二进制数据的MIME类型。

    window.URL.createObjectURL(blob)方法可以创建一个对象URL,并返回指向一块内存的地址。

    对象URL指的是(引用保存在File或Blob中数据的)URL。

    eg:

    var canvas = document.getElementById("canvas");

    canvas.toBlob(function(blob){

        // 使用 createObjectURL 生成地址,格式为 blob:[页面链接的协议和domain部分]/fd95b806-db11-4f98-b2ce-5eb16b38ba36

        var url = URL.createObjectURL(blob);

        var a = document.createElement("a");

        a.download = "canvas";

        a.href = url;

        // 模拟a标签点击进行下载

        a.click();

        // 下载后告诉浏览器不再需要保持这个文件的引用了

        URL.revokeObjectURL(url);

    });

    相关文章

      网友评论

          本文标题:文件下载的几种方式

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