是否可以仅使用JavaScript将数据写入文件?

2022-08-30 00:22:21

我想使用JavaScript将数据写入现有文件。我不想在主机上打印它。我想实际将数据写入 .我阅读了许多回答的问题,但每个地方都在控制台上打印。在某个地方,他们已经给出了代码,但它不起作用。所以请任何人都可以帮助我 如何实际将数据写入文件。abc.txt

我引用了代码,但它不起作用:它给出错误:

未捕获的类型错误:构造函数非法

在铬和

安全错误:操作不安全。

在 Mozilla 上

var f = "sometextfile.txt";

writeTextFile(f, "Spoon")
writeTextFile(f, "Cheese monkey")
writeTextFile(f, "Onion")

function writeTextFile(afilename, output)
{
  var txtFile =new File(afilename);
  txtFile.writeln(output);
  txtFile.close();
}

那么我们实际上可以只使用Javascript或不使用Javascript将数据写入文件吗?


答案 1

可以使用 BlobURL.createObjectURL 在浏览器中创建文件。所有最近的浏览器都支持此功能

您无法直接保存您创建的文件,因为这会导致大量的安全问题,但您可以将其作为用户的下载链接提供。您可以在支持下载属性的浏览器中通过链接的下载属性建议文件名。与任何其他下载一样,下载文件的用户将对文件名拥有最终决定权。

var textFile = null,
  makeTextFile = function (text) {
    var data = new Blob([text], {type: 'text/plain'});

    // If we are replacing a previously generated file we need to
    // manually revoke the object URL to avoid memory leaks.
    if (textFile !== null) {
      window.URL.revokeObjectURL(textFile);
    }

    textFile = window.URL.createObjectURL(data);

    // returns a URL you can use as a href
    return textFile;
  };

下面是使用此技术保存 .textarea

如果要立即启动下载,而不是要求用户单击链接,则可以使用鼠标事件来模拟鼠标单击链接,就像 Lifecube 的答案所做的那样。我创建了一个使用此技术的更新示例

  var create = document.getElementById('create'),
    textbox = document.getElementById('textbox');

  create.addEventListener('click', function () {
    var link = document.createElement('a');
    link.setAttribute('download', 'info.txt');
    link.href = makeTextFile(textbox.value);
    document.body.appendChild(link);

    // wait for the link to be added to the document
    window.requestAnimationFrame(function () {
      var event = new MouseEvent('click');
      link.dispatchEvent(event);
      document.body.removeChild(link);
    });

  }, false);

答案 2

对此的一些建议 -

  1. 如果您尝试在客户端计算机上写入文件,则无法以任何跨浏览器方式执行此操作。IE 确实有方法使“受信任的”应用程序能够使用 ActiveX 对象来读/写文件。
  2. 如果您尝试将其保存在服务器上,则只需将文本数据传递到服务器并使用某些服务器端语言执行文件写入代码即可。
  3. 要在客户端存储一些相当小的信息,您可以使用cookie。
  4. 将 HTML5 API 用于本地存储。