当我一直在寻找一种使用 JavaScript 从网站创建和下载文本文件的方法时,我找到了很多解决方案,但通常使用Blob
/createObjectURL
或 other encodeURIComponent
,从我所见的情况来看,前者更受欢迎. 下面我展示了两个示例:请注意,两个函数的开头只有一两行不同(我在评论中指出)。
Blob
/ createObjectURL
:
function dl_as_file_Blob(filename_to_dl, data_to_dl) {
let blobx = new Blob([data_to_dl], { type: 'text/plain' }); // ! Blob
let elemx = window.document.createElement('a');
elemx.href = window.URL.createObjectURL(blobx); // ! createObjectURL
elemx.download = filename_to_dl;
elemx.style.display = 'none';
document.body.appendChild(elemx);
elemx.click();
document.body.removeChild(elemx);
}
encodeURIComponent
:
function dl_as_file_URI(filename_to_dl, data_to_dl) {
let elemx = document.createElement('a');
elemx.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(data_to_dl); // ! encodeURIComponent
elemx.download = filename_to_dl;
elemx.style.display = 'none';
document.body.appendChild(elemx);
elemx.click();
document.body.removeChild(elemx);
}
我想知道的是是否有任何理由更喜欢其中一个。到目前为止,我可以找到两个小的差异。首先,encodeURIComponent
浏览器比createObjectURL
. 其次,Blob
似乎不支持编码。基于此,我会选择encodeURIComponent
解决方案,但我想知道是否有原因导致我更频繁地看到Blob
/解决方案。createObjectURL
编辑:上面的问题很笼统,所以让我针对我的具体用例缩小一点范围:我想让用户下载一个简单(utf-8)、相对较小(最大 100-200 kB)的文本(结果完成的自我评估测试)。不涉及真正的敏感数据,文件仅用于此目的,在客户端。尽管如此,我也欢迎更一般的答案,因为我对这些差异感到好奇。