分享一个可以创建和下载文本文件的JavaScript函数

259 阅读2分钟

使用JavaScript创建和下载文本文件

最近我的项目里需要用JavaScript创建和下载文本文件的功能,例如,在笔记里,我想导出我的书签为一个Json文件,我需要导出笔记为一个文本文件。

我用下面的JavaScript函数创建和下载各种类型的文件。

function saveTextAsFile(textToWrite, fileNameToSaveAs, fileType) {
    let textFileAsBlob = new Blob([textToWrite], { type: fileType });
    let downloadLink = document.createElement('a');
    downloadLink.download = fileNameToSaveAs;
    downloadLink.innerHTML = 'Download File';

    if (window.webkitURL != null) {
        downloadLink.href = window.webkitURL.createObjectURL(
            textFileAsBlob
        );
    } else {
        downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
        downloadLink.style.display = 'none';
        document.body.appendChild(downloadLink);
    }

    downloadLink.click();
}

这个函数非常简单,接受三个参数

  • 要写入的文本
  • 文件的名称
  • 文件类型

函数内根据传入的文本文件类型创建一个 Blob 对象,然后创建一个 a 标签,根据参数文件的名称 给 a 标签设置 download 属性

接着 看 window 下是否存在 webkitURL 对象,如果存在,就调用它的createObjectURL函数,为 Blob对象 创建一个 URL 对象,如果没有webkitURL 对象,就使用 URL.createObjectURL() 为 Blob对象 创建一个 url对象。

接着 将创建的 url对象 设置到 a 标签的 href 属性上,并将 a 标签添加到 body 上,然后模拟点击一下。

所以如果你想用JavaScript创建和下载一个文本文件,你可以使用上面的函数,例如,你想创建一个名称为 hello.txt ,内容为 Hello World! 的文本文件,可以这样使用:

saveTextAsFile('Hello World!', 'hello.txt', 'text/plain');

同样,你想创建和下载一个名为 hello.json ,内容为{"hello": "world"}的json文件,可以这样使用:

saveTextAsFile('{"hello": "world"}', 'hello.json', 'application/json');

可以点击here,体验demo。

当然以上只是一个基础的函数,可以根据不同状况进行扩展。

tips:

  • 除了IE-11和Opera-Mini,它可以在所有浏览器上运行。
  • 任何下载都可能被客户端阻止,运行任何下载功能都不能保证下载成功,也没有任何方法可以用来发现下载是否已经完成或甚至已经开始.

翻译原文:Create and download text files using JavaScript