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

新手上路,请多包涵

我想使用 JavaScript 将数据写入现有文件。

我不想在控制台上打印它。

我想实际将数据写入 abc.txt

我阅读了许多已回答的问题,但他们在控制台上打印的每个地方。

在某些地方,他们已经给出了代码,但它不起作用。

所以请任何人都可以帮助我如何实际将数据写入文件。

我提到了代码,但它不起作用:

它的错误:

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

在镀铬和

SecurityError:操作不安全。

在 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 将数据写入文件吗?

原文由 pareshm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 824
2 个回答

对此的一些建议——

  1. 如果您尝试在客户端计算机上写入文件,则不能以任何跨浏览器方式执行此操作。 IE 确实具有启用“受信任”应用程序以使用 ActiveX 对象读取/写入文件的方法。

  2. 如果您尝试将其保存在您的服务器上,那么只需将文本数据传递到您的服务器并使用某些服务器端语言执行文件编写代码。

  3. 要在客户端存储一些非常小的信息,您可以使用 cookie。

  4. 使用 HTML5 API 进行本地存储。

原文由 Sujit Agarwal 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 BlobURL.createObjectURL 在浏览器中创建文件。所有最新的浏览器都 支持这个

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

 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);

原文由 Useless Code 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题