是否可以使用 JavaScript 写入文件(在磁盘上)?
Posted
技术标签:
【中文标题】是否可以使用 JavaScript 写入文件(在磁盘上)?【英文标题】:Is it possible to write to a file (on a disk) using JavaScript? 【发布时间】:2009-01-20 15:35:05 【问题描述】:我是一名初级中级程序员,正在研究 AJAX。在阅读 javascript 时,我发现我一直在绘制的大多数示例都使用 php 进行这样的操作很奇怪。我知道你们中的许多人可能会争辩说“我做错了”或“JavaScript 是一种客户端语言”等,但问题仍然存在。 . . 你能用 JavaScript 写一个文件吗?
【问题讨论】:
【参考方案1】:是的,当然可以。这仅取决于您的 javascript 引擎为您提供的 API 对象。
但是,您正在考虑的 javascript 引擎很可能不提供此功能。绝对没有一个主要的网络浏览器会允许它。
【讨论】:
一些浏览器确实允许这样做,如果它们支持File System Access API。 @AndersonGreen 我认为 2009 年不存在,但这是对问题的一个很好的补充。也许提供一个新的答案。【参考方案2】:您可以使用 Javascript 编写 cookie,在较新的浏览器上,您还可以使用 SQLite 数据库来存储客户端数据。但是,您不能将数据存储在磁盘上的任意位置。
【讨论】:
【参考方案3】:您可以使用Google Gears 之类的东西来生成能够将数据存储在本地缓存或数据库中的JS 应用程序。但是,您不能读取或写入磁盘的任意区域。(这是写于 2009 年 - Google Gears is now deprecated)
这些天,你应该看看local storage capabilities provided by html5
【讨论】:
【参考方案4】:没有。您可以使用 JavaScript 创建对服务器端处理脚本的 AJAX 请求,但允许 JS 直接写入磁盘 - 无论是客户端还是服务器端 - 将是一个巨大的、讨厌的、明显的、不可原谅的浏览器安全漏洞。
【讨论】:
【参考方案5】:简短的回答是否定的;默认情况下,您不能通过在浏览器中使用纯 JavaScript 将文件写入本地磁盘。你需要一个帮手来做到这一点。例如,TiddlyWiki 是一个 wiki 引擎,它只是一个单独的静态 HTML 文件,但它可以在 Java 小程序(Tiddly Saver)的帮助下将自己写入磁盘。
【讨论】:
【参考方案6】:您可以在 Windows 脚本宿主中。
【讨论】:
【参考方案7】:下一个版本的 chrome (v52) 使用 fetch api + service worker + 流使这成为可能,您现在可以使用标志启用流...
你可以去StreamSaver.js看看如何使用它的一些例子。
你可以这样做:
const writeStream = fs.createWriteStream('filename.txt')
const encoder = new TextEncoder
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")
writeStream.write(uint8array)
writeStream.close()
或者直接看演示:https://jimmywarting.github.io/StreamSaver.js/example.html
【讨论】:
【参考方案8】:不,Javascript 根本不允许访问文件系统,这是浏览器中的一个安全限制。真正做到这一点的唯一方法是使用 ActiveX,但随后您将自己限制为使用 IE。
编辑: 正如上面的帖子所述,如果您的引擎允许它是可能的,但是我不知道有哪个浏览器引擎(我假设您正在编写它)可以让您这样做。
【讨论】:
ActiveX 不是唯一的方法。您可以使用 Java,而不仅限于 IE。 我们在这里谈论的是 Javascript,而不是 Java,他要求的最常见的方法是使用 activeX,这将您限制在 IE 中 ActiveX 如何比 Java 更“JavaScript”?您只是在 HTML 文件中嵌入了一个附加对象,并让 JavaScript 将其用作帮助程序。【参考方案9】:如果您只需要让用户通过浏览器下载对话框下载文件(.txt
、.csv
、图像等),您可以使用带有<a href=... download=.../>
标签的data URIs。
例如(对于文本文件):
<a href="data:text/plain;charset=utf-8,TEXT_HERE" download="filename.txt"> Click to download </a>
您也可以使用javascript设置href
和download
属性,并使用element.click()
触发下载。
但是,如果没有用户确认文件下载对话框,此方法无法写入文件。
【讨论】:
以上是关于是否可以使用 JavaScript 写入文件(在磁盘上)?的主要内容,如果未能解决你的问题,请参考以下文章