【问题标题】:Save file Javascript with file name [duplicate]用文件名保存文件Javascript [重复]
【发布时间】:2011-12-04 19:04:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • @zzzzBov 我认为这个答案比您链接到的答案更好,因为它实际上显示了针对所述问题的解决方案。
  • @AdriánSalgado,这并没有使这个问题不再重复,但是接近投票发生在 2 年前。正如你所看到的,没有足够的支持来真正结束这个问题。如果您认为其他问题应该有更好的答案,那么我建议添加一个。
  • 似乎还没有什么好的答案!我猜这只是javascript窗口对象中的一个小黑洞!我有同样的担忧:我的代码将动态打开包含报告的文件,但文件名不是我的代码定义的。我不应该要求用户单击 href 并下载文件。
  • 在 Chrome 版本 55.0.2883.87 m(64 位)中似乎无法使用,不过如此接近。我得继续思考。

标签: javascript


【解决方案1】:
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 年。所以我的问题是,这仍然是要走的路吗?这感觉有点“hackish”。
【解决方案2】:

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

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

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

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

【讨论】:

【解决方案3】:

像这样使用filename 属性:

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

编辑:

显然,没有可靠的方法来做到这一点。见:Is there any way to specify a suggested filename when using data: URI?

【讨论】:

  • 嗯,我试过了,它仍在下载一个名为“下载”的文件。这就是我现在的代码:uriContent = "data:application/octet-stream;filename=filename.txt," + encodeURIComponent(codeMirror.getValue()); newWindow=window.open(uriContent, 'filename.txt');
  • 似乎不适用于我在 Firefox 中完成的浏览器测试;这是其他浏览器中的功能吗? Wikipedia mentions that Data URL's can't carry filenames.
  • 嗯好的,谢谢你的回答!
  • 这不适用于 Firefox。 10.0.9
猜你喜欢
  • 2015-02-08
  • 2012-11-04
  • 2011-08-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多