是否可以将 JavaScript 变量保存为文件?

IT技术 javascript
2021-02-28 23:33:47

有没有办法将字符串从 JavaScrip 变量转换为用户可以在单击按钮时下载的可下载文件?

感谢您的任何建议。

<div id="txt">Lorem Ipsum</div>
<br />
<button id="test">Download text as file !</button>
3个回答

是的,您可以使用download属性在 HTML5 中执行类似操作

function download_txt() {
  var textToSave = document.getElementById('txt').innerHTML;
  var hiddenElement = document.createElement('a');

  hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
  hiddenElement.target = '_blank';
  hiddenElement.download = 'myFile.txt';
  hiddenElement.click();
}

document.getElementById('test').addEventListener('click', download_txt);

小提琴

非常感谢,这对我来说是一个很好的解决方案。
2021-04-24 23:33:47
这在 Chrome 上运行良好,但是:对于 OSX 上的 Firefox(43.0.3,2016 年初)根本不起作用。在 Safari 上工作一半;文件下载,但使用默认名称并打开一个空白选项卡。
2021-05-05 23:33:47
@MohamedHussain - 如果您习惯先将其JSON.stringify字符串化。
2021-05-11 23:33:47
Fiddle 在 Firefox 45 (Ubuntu) 上似乎根本不起作用 - 有什么办法可以解决这个问题吗?
2021-05-18 23:33:47
仅适用于 Windows 7 上的 Chrome。不适用于 firefox 或 IE。
2021-05-19 23:33:47

您可以使用 data: URI 就像在 adeneo 的答案中一样,但另一种方法是使用HTML5 Blob 和 createObjectURL(类似地使用下载属性来创建下载链接)。

使用 createObjectURL 的好处是大多数浏览器中的数据 URI 都有严格的大小限制。

来自链接文章的示例代码:

var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], {type: 'application/octet-binary'});
    // pass a useful mime type here
var url = URL.createObjectURL(blob);
// url will be something like: blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
// now you can use the url in any context that regular URLs can be used
// in, for example img.src, etc.
我真的可以使用示例的其余部分(将内容下载为 .json)
2021-05-12 23:33:47
在现代浏览器中,数据 URI 的长度是无限的,一些较旧的浏览器会将其限制在 65000 个字符左右,所以我不会说“严格的大小限制”!
2021-05-15 23:33:47

要存储 javascript 变量,我建议您使用像这样的数据存储库您可以在其中设置变量,获取它,删除它......

$.setData("key","value");
$.getData("key");
$.removeData("key");

但是要将其存储在文件中并使其可下载,除非您使用 javascript 技巧下载不存在的文件,否则您必须通过服务器传递,您只需声明这些函数

 var Download = 
    {
        click : function(node) {
            var ev = document.createEvent("MouseEvents");
            ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            return node.dispatchEvent(ev);
        },
        encode : function(data) {
                return 'data:application/octet-stream;base64,' + btoa( data );
        },
        link : function(data, name){
            var a = document.createElement('a');
            a.download = name || self.location.pathname.slice(self.location.pathname.lastIndexOf('/')+1);
            a.href = data || self.location.href;
            return a;
        }
    };
    Download.save = function(data, name)
    {
        this.click(
            this.link(
                this.encode( data ),
                name
            )
        );
    };

当你想下载一个文件时,你可以这样做

Download.save("data to be on a file","FileName.txt");

最后,您需要结合 datastorage 和 filedownload 解决方案以获得您要求的结果

太可怕了,为什么不使用单个功能?创建点击、链接和编码有什么意义???这是不良编程的一个例子。
2021-05-12 23:33:47