是否可以使用JavaScript写入文件(在磁盘上)?

时间:2009-01-20 15:35:05

标签: javascript ajax

我是一名新手 - 中级程序员,他正在攻击AJAX。在阅读JavaScript时,我发现很奇怪我所使用的大部分示例都使用PHP进行此类操作。我知道你们许多人可能会说“我做错了”或“JavaScript是一种客户端语言”等但问题仍然存在。 。你能用JavaScript写一个文件吗?

9 个答案:

答案 0 :(得分:19)

是的,当然可以。它只取决于您的javascript引擎可用的API对象。

但是,您正在考虑的javascript引擎不提供此功能。绝对没有主流的网络浏览器允许它。

答案 1 :(得分:16)

您可以使用Javascript编写Cookie,在较新的浏览器上,您还可以使用SQLite数据库来存储客户端数据。但是,您无法将数据存储在磁盘上的任意位置。

答案 2 :(得分:6)

您可以使用Google Gears之类的东西来生成能够将数据存储在本地缓存或数据库中的JS应用程序。你不能读或写磁盘的任意区域。(这是写于2009年 - Google Gears is now deprecated

现在,您应该查看local storage capabilities provided by HTML5

答案 3 :(得分:2)

没有。您可以使用JavaScript为服务器端处理脚本创建AJAX请求,但允许JS直接写入磁盘 - 客户端或服务器端 - 将是一个庞大,令人讨厌,明显,不可原谅的浏览器安全漏洞。 / p>

答案 4 :(得分:2)

简短的回答是否定的;通过在浏览器中使用纯JavaScript,默认情况下不能将文件写入本地磁盘。你需要一个帮手才能做到这一点。例如,TiddlyWiki是一个wiki引擎,它只是一个静态HTML文件,但它可以借助Java applet(Tiddly Saver)将自己写入磁盘。

答案 5 :(得分:1)

您可以在Windows Scripting Host中使用。

答案 6 :(得分:1)

下一版本的chrome(v52)可以通过fetch api + service worker + streams实现这一点,你现在可以使用标志启用流...

您可以转到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

答案 7 :(得分:0)

不,Javascript根本不允许访问文件系统,这是浏览器中的安全限制。你可以真正做到这一点的唯一方法是使用ActiveX,但是你限制自己使用IE。

修改 正如上面的帖子所述,如果你的引擎允许它可能是可能的,但是我不知道有一个浏览器引擎(这是我为你写的那个asusme),这将允许你。

答案 8 :(得分:0)

如果只需要让用户通过浏览器下载对话框下载文件(.txt.csv,图像和其他文件),则可以使用data URIs带有<a href=... download=.../>标签。

例如(对于文本文件):

<a href="data:text/plain;charset=utf-8,TEXT_HERE" download="filename.txt"> Click to download </a>

您还可以使用JavaScript设置属性hrefdownload,并使用element.click()触发下载。

但是,如果没有用户确认文件下载对话框,此方法就无法写入文件。