我是一名初中级程序员,正在尝试使用AJAX技术。在学习JavaScript的过程中,我发现很奇怪的一点是,我所参考的大部分例子都是使用PHP来完成操作。虽然有些人可能会说我“做法不对”或者“JavaScript是客户端语言”等等,但问题依然存在……你能否只使用JavaScript编写文件呢?
我是一名初中级程序员,正在尝试使用AJAX技术。在学习JavaScript的过程中,我发现很奇怪的一点是,我所参考的大部分例子都是使用PHP来完成操作。虽然有些人可能会说我“做法不对”或者“JavaScript是客户端语言”等等,但问题依然存在……你能否只使用JavaScript编写文件呢?
当然可以,这取决于你的JavaScript引擎提供了哪些API对象。但是,很可能你想使用的JavaScript引擎并没有提供此功能。绝对不会有任何主流的Web浏览器允许它。
您可以使用Javascript编写Cookies,在较新的浏览器中,您还可以使用SQLite数据库存储客户端数据。但是您不能在磁盘的任意位置存储数据。
不可以。你可以使用JavaScript创建一个AJAX请求到服务器端处理脚本,但是让JS直接写入磁盘 - 无论是客户端还是服务器端 - 都将是一个巨大的、令人恶心的、惹人注目的、不可原谅的浏览器安全漏洞。
Chrome浏览器的下一个版本(v52)通过fetch api + service worker + streams实现了这一点,您现在可以使用标志启用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
不,JavaScript 无法访问文件系统,这是浏览器中的安全限制。唯一的方法是使用 ActiveX,但这样你就只能使用 IE。
编辑: 如上所述,如果您的引擎允许,则可能是可能的,但我不知道有哪个浏览器引擎(我认为您正在为其编写)会允许您这样做。
如果您只需要让用户通过浏览器下载对话框下载文件(.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设置属性href
和download
,并使用element.click()
触发下载。
然而,这种方法不能在用户确认文件下载对话框之前写入文件。