使用文件名保存文件Javascript

IT技术 javascript
2021-01-21 20:16:58

我正在使用纯 Javascript 编写文本编辑器。我希望这样当用户单击“保存”按钮时,编辑器会下载文件。我已经部分工作了:

uriContent = "data:application/octet-stream," + encodeURIComponent(codeMirror.getValue());
newWindow=window.open(uriContent, 'filename.txt');

文件下载,但问题是文件名为“下载”。

问题:如何将文件名更改为我想要的任何名称,例如filename.txt

3个回答

用锚链接替换“保存”按钮并download动态设置新属性。适用于 Chrome 和 Firefox:

var d = "ha";
$(this).attr("href", "data:image/png;base64,abcdefghijklmnop").attr("download", "file-" + d + ".png");

这是一个名称设置为当前日期的工作示例:http : //jsfiddle.net/Qjvb3/

这是download属性的兼容性表http : //caniuse.com/download

下载属性浏览器支持caniuse.com/#feat=download
2021-03-12 20:16:58
如上所述,Safari 和 IE 不支持下载属性。
2021-03-31 20:16:58
function saveAs(uri, filename) {
    var link = document.createElement('a');
    if (typeof link.download === 'string') {
        document.body.appendChild(link); // Firefox requires the link to be in the body
        link.download = filename;
        link.href = uri;
        link.click();
        document.body.removeChild(link); // remove the link when done
    } else {
        location.replace(uri);
    }
}
你救了我一命兄弟。谢谢
2021-03-24 20:16:58
我们现在生活在 2021 年。所以我的问题是,这仍然是要走的路吗?这感觉有点“hackish”。
2021-04-11 20:16:58

filename像这样使用属性:

uriContent = "data:application/octet-stream;filename=filename.txt," + 
              encodeURIComponent(codeMirror.getValue());
newWindow=window.open(uriContent, 'filename.txt');

编辑:

显然,没有可靠的方法可以做到这一点。请参阅:在使用 data: URI 时,是否有任何方法可以指定建议的文件名?

嗯,好的,无论如何感谢您的回答!
2021-03-12 20:16:58
这不适用于 Firefox。10.0.9
2021-03-27 20:16:58
嗯,我试过了,它仍然在下载一个名为“下载”的文件。这就是我现在的代码:uriContent = "data:application/octet-stream;filename=filename.txt," + encodeURIComponent(codeMirror.getValue()); newWindow=window.open(uriContent, 'filename.txt');
2021-04-02 20:16:58
似乎对我在 Firefox 中所做的浏览器测试不起作用;这是其他浏览器的功能吗?维基百科提到数据 URL 不能携带文件名
2021-04-06 20:16:58