Javascript无需点击即可下载csv

标签 javascript csv download click

我正在尝试使用 Javascript 自动下载 csv 文件。下面是我的 Javascript。我试图消除底部的 HMTL,因为 Javascript 将处于 for 循环中,并且我希望每次运行 for 循环时都下载该文件。

function convertArrayOfObjectsToCSV(args) {
    var result, ctr, keys, columnDelimiter, lineDelimiter, data;

    data = args.data || null;
    if (data == null || !data.length) {
        return null;
    }

    columnDelimiter = args.columnDelimiter || ',';
    lineDelimiter = args.lineDelimiter || '\n';

    keys = Object.keys(data[0]);

    result = '';
    result += keys.join(columnDelimiter);
    result += lineDelimiter;

    data.forEach(function(item) {
        ctr = 0;
        keys.forEach(function(key) {
            if (ctr > 0) result += columnDelimiter;

            result += item[key];
            ctr++;
        });
        result += lineDelimiter;
    });

    return result;
}

window.downloadCSV3 = function(args) {
    var data, filename, link;

    var csv = convertArrayOfObjectsToCSV({
        data: allTheData
    });
    if (csv == null) return;

    filename = args.filename || 'export.csv';

    if (!csv.match(/^data:text\/csv/i)) {
        csv = 'data:text/csv;charset=utf-8,' + csv;
    }
    data = encodeURI(csv);

    link = document.createElement('a');
    link.setAttribute('href', data);
    link.setAttribute('download', filename);
    link.click();
}

这就是 HTML 的样子

<a href='#' id='link3' onclick='downloadCSV3({ filename: "file-id.csv" });'>Download CSV</a>

有没有办法不必处理 HTML,而是用 Javascript 下载文件?下载过程中将运行一个 for 循环,这就是为什么我不想点击。

最佳答案

您可以使用隐藏的 iframe 并指示服务器将文件 MIME 类型设置为一些随机的废话。这将导致浏览器默认为“application/octet-stream”,从而导致浏览器提示您下载。

<iframe id="frame"></iframe>

<script>
document.getElementById("frame").style.display = "none";
function Download(ref) {
document.getElementById('frame').src = ref;
};
</script>

关于Javascript无需点击即可下载csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40275267/

相关文章:

javascript - 单击时变大的小图 block

Python csv 文本操作

python - CSV转换为带有python SerializationError的elasticsearch

Java 本地化文件名

javascript - eslint 无法捕获另一个模块中定义的拼写错误的函数名称

javascript - 有没有办法让表格单元格固定在给定高度并启用自动换行?

javascript - 双击后使用 jQuery 选择 <li> 项

python - 按正确的顺序将字典写入 csv 文件

asp.net-mvc - Response.Flush 与 MVC 结果不起作用

swift - 在 Swift 中部分下载数据