在Safari浏览器中无法下载csv文件

时间:2020-06-22 13:31:14

标签: javascript html

我已经使用下面的代码下载了一个csv文件

let url = "https://test.com/test/auth/files/download/86ccc28c-383f-4c84-ac0d-61478da2f62c/e60f7709-288a-424c-bb13-9ff4bb60bec1?platform=HTMLCLIENT&source=855ca910c9d347b69403cf1791bab97c&linktoken=be50f537833bf693d9e0a3ecb8432159db966ee6"

window.open(url);

以上代码在safari浏览器以外的所有浏览器中均有效。

我已完成以下工作,

let a = document.createElement('a');
    a.target = '_self';
    a.href = url;
    a.download = 'test.csv';
    document.body.appendChild(a);
    a.click();

,它将在新标签页中打开文件,而不是在野生动物园中下载。有人可以帮助解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以发布任何HTML吗?我已经成功通过使用定位标记中的download属性来强制下载文件。

<a href="http://www.this.link.com/csv_1.csv" download...

答案 1 :(得分:0)

参考:https://bugs.webkit.org/show_bug.cgi?id=167341
https://github.com/dotnetCarpenter/FileReader_Chrome

提取为blob并转换为datauri。不适合大文件,因为整个base64编码的文件必须存储在内存中。

fetch(url, {
    method: 'get',
})
.then(response => response.blob())
.then(blob => {
    const fileName = 'filename.csv'
    if (navigator.msSaveBlob) { // IE11 and Edge 17-
        navigator.msSaveBlob(blob, fileName)
    } else { // every other browser
        const reader = new FileReader()
        reader.onloadend = () => {
            const a = document.createElement("a")
            a.href = reader.result
            a.style.display = 'none'
            a.download = fileName
            document.body.appendChild(a)
            a.click()
            a.parentNode.removeChild(a)
        }
        reader.readAsDataURL(blob)
    }
})