【问题标题】:Javascript: set filename to be downloadedJavascript:设置要下载的文件名
【发布时间】:2013-05-04 15:56:45
【问题描述】:

我正在使用插件从表中生成 csv 文件,该文件正在以“下载”文件名下载,我该如何更改文件名,例如作为下载.csv

var csv = $("#table").table2CSV({delivery:'download'});
window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv);

【问题讨论】:

    标签: javascript csv


    【解决方案1】:

    我编写了一个工具,您可以使用该工具以自定义文件名将文件保存到本地计算机的下载文件夹中(如果在客户端计算机上可行的话)。

    在撰写本文时,您需要 chrome、firefox 或 IE10 才能获得该特定功能,但如果可用的话,此工具会退回到未命名的下载,因为有总比没有好...

    供您使用:

    download(csv, "dowload.csv", "text/csv");
    

    还有魔法密码:

    function download(strData, strFileName, strMimeType) {
        var D = document,
            a = D.createElement("a");
            strMimeType= strMimeType || "application/octet-stream";
    
    
        if (navigator.msSaveBlob) { // IE10
            return navigator.msSaveBlob(new Blob([strData], {type: strMimeType}), strFileName);
        } /* end if(navigator.msSaveBlob) */
    
    
        if ('download' in a) { //html5 A[download]
            a.href = "data:" + strMimeType + "," + encodeURIComponent(strData);
            a.setAttribute("download", strFileName);
            a.innerHTML = "downloading...";
            D.body.appendChild(a);
            setTimeout(function() {
                a.click();
                D.body.removeChild(a);
            }, 66);
            return true;
        } /* end if('download' in a) */
    
    
        //do iframe dataURL download (old ch+FF):
        var f = D.createElement("iframe");
        D.body.appendChild(f);
        f.src = "data:" +  strMimeType   + "," + encodeURIComponent(strData);
    
        setTimeout(function() {
            D.body.removeChild(f);
        }, 333);
        return true;
    } /* end download() */
    

    更新:添加了面向未来的 IE 例程

    update2:检查 the evolved version on GitHub,其中包括 dataURL 和 Blob 支持。

    【讨论】:

    • 看起来不错,但它不支持 2012 年之前的任何浏览器。我想这是我们可以通过客户端下载做的最好的事情。
    • 实际上,dataURL 回退适用于相当旧的 firefox 副本,并且在较旧的 chrome 上存在一些可解决的 mime 类型问题。在去年添加 IE10 和 [下载] 功能之前,我已经使用该功能多年...
    • BlobBuilder 已被弃用。请编辑您的答案以改用Blob 构造函数。
    • @RobW:它不使用 BlobBuild,它使用 msBlobBuilder 为该浏览器提供 IE10 分支,否则脚本将不支持...
    • MSBlobBuilder 将在 IE 的未来版本中被删除。它是在 IE 的开发版本中引入的,但由于在 IE10(发布预览版)中也添加了不带前缀的 Blob 构造函数,因此 MSBlobBuilder 将始终是一个糟糕的选择。您应该对 navigator.msSaveBlob 进行功能检测,并在可用时使用 Blob 构造函数。
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多