如何使用JavaScript写入文件(用户目录)?

我想从铬(所有版本)使用HTML5和JavaScript或jQuery的任何文件的TXT文件。

我试过FileSystem API和我试过的代码是:

函数onFs(fs){
 的console.log( '试验');
   fs.root.getFile('log.txt',{create:true,exclusive:true},
      函数(fileEntry){
         // fileEntry.isFile === true
         // fileEntry.name =='log.txt'
         // fileEntry.fullPath =='/log.txt'

         fileEntry.getMetaData(function(md){
          的console.log(md.modificationTime.toDateString());
         },onError);

       },
       onerror的
   );
 }

 window.webkitRequestFileSystem(TEMPORARY,1024 * 1024 / * 1MB * /,onFs);

但不工作。

有没有办法写入文件?

我想在用户目录中写入文件

你不能直接写文件到用户文件系统。

在search了类似的问题之后,能够准确地解决问题,能够在@nk后在plnkr下创build文件的$ cat内容在哪里PERSISTENT文件系统存储在哪里用chrome存储? 。 该文件被写入~/.config/[chrome, chromium]目录下的用户文件系统。

使用文件pipe理器导航到

  ~/.config/[chrome, chromium]/Default/File System 

审查目录; 包含下面写的文本的文件在具有两个数字作为文件夹名的文件夹中被find,然后在另外两个子目录中被find; 具有单个小写字母作为文件夹名称的子目录; 在这个子目录中还有另一个子目录有两个数字作为文件夹名称; 由window.webkitRequestFileSystem编写的文件具有八位数字作为文件名,没有扩展名,但是具有正确的"text/plain" MIMEtypes; 设置为Blob type属性。

然后在terminal

  $ cd ~/.config/[chrome, chromium]/Default/File\ System/[three digits]/[lowercase letter]/[two digits] $ cat [eight digits] Lorem Ipsum 

还没有尝试创build一个.sh文件并执行它。 可能需要将目录放在path或将文件移动到现有path的文件夹; 为文件设置适当的permissions 。 可能可以调整在铬/铬浏览器设置,但也没有尝试过这一点。

你可能会写一个命令来复制或移动文件到/path/to/file到一个path的文件夹,然后执行这个文件。 或其他方法。


您可以使用元素的download属性来允许将由createWriter创build的文件下载到用户文件系统。

文件系统是沙盒

由于文件系统是沙盒,Web应用程序无法访问其他应用程序的文件。 您也无法将文件读取或写入用户硬盘驱动器上的任意文件夹(例如“我的图片”和“我的文档”)。

另请参阅Definititons

永久性存储永久性存储是保留在浏览器中的存储,除非用户将其删除,或者应用程序将其删除。
临时存储任何Web应用程序均可使用暂存存储 。 它是自动的,不需要请求,但是浏览器可以在没有警告的情况下删除存储。


我想写用户目录中的文件,因为它必须是用户可以理解的。

编辑,更新

您可以使用上述方法。 也就是说,使用文件pipe理器查看文件夹和文件的显示方式

  ~/.config/[chrome, chromium]/Default/File System ## do stuff with contents of file written by `window.requestFilesystem` 

要在chrome / chromium FileSystem查看文件,您可以导航到DevTools – > Experiments – >检查FileSystem inspectionlog.txt应该在FileSystem Resources选项卡上列出。

也可以使用URL导航到地址栏中的文件

 filesystem:http://run.plnkr.co/temporary/log.txt 

应该有内容

 Lorem Ipsum 

要么

 filesystem:http://run.plnkr.co/temporary/ 

查看临时文件系统根目录下的所有文件和目录

请参阅探索文件系统API

首先使用--allow-file-access-from-files标志启动chrome / chromium,请参阅如何使Google Chrome标志为“永久禁止文件访问” 。

下一个

 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; 

添加error handling

 function errorHandler(e) { var msg = ''; switch (e.message) { case FileError.QUOTA_EXCEEDED_ERR: msg = 'QUOTA_EXCEEDED_ERR'; break; case FileError.NOT_FOUND_ERR: msg = 'NOT_FOUND_ERR'; break; case FileError.SECURITY_ERR: msg = 'SECURITY_ERR'; break; case FileError.INVALID_MODIFICATION_ERR: msg = 'INVALID_MODIFICATION_ERR'; break; case FileError.INVALID_STATE_ERR: msg = 'INVALID_STATE_ERR'; break; default: msg = 'Unknown Error'; break; }; console.log('Error: ' + msg); } 

你应该能够

 function writeFile(fs) { fs.root.getFile('log.txt', {create: true}, function(fileEntry) { // Create a FileWriter object for our FileEntry (log.txt). fileEntry.createWriter(function(fileWriter) { fileWriter.onwriteend = function(e) { console.log('Write completed.'); // call `readFile` here window.requestFileSystem(window.TEMPORARY, 1024*1024, readFile, errorHandler); }; fileWriter.onerror = function(e) { console.log('Write failed: ' + e.toString()); }; // Create a new Blob and write it to log.txt. var blob = new Blob(['Lorem Ipsum'], {type: 'text/plain'}); fileWriter.write(blob); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.TEMPORARY, 1024*1024, writeFile, errorHandler); function readFile(fs) { fs.root.getFile('log.txt', {}, function(fileEntry) { // Get a File object representing the file, // then use FileReader to read its contents. fileEntry.file(function(file) { var reader = new FileReader(); reader.onloadend = function(e) { console.log(e.target.result) }; reader.readAsText(file); }, errorHandler); }, errorHandler); } 

plnkr http://plnkr.co/edit/EVVNYYUvHiM545T06kMC?p=preview


请注意,在Chrome 38+上,也可以使用new File()构造函数创build一个File对象; 请参阅Chrome:使用Javascript创buildblob文件input? 。

不,这是后台进程,将数据保存到文件夹中存在的文件中。

这种方法也不会自动将创build的文件写入用户文件系统的现有文件夹。

无论采用哪种方法,都需要用户操作将文件保存到用户文件系统。 这可以通过在元素, data URI download属性来实现如何将JavaScript数组信息导出到csv(在客户端)? ,或者iframe元素下载文件使用Javascript / jQuery ; 应提示用户select保存文件或不保存文件。


另请参阅FileSaver接口 FileSaver.js