【问题标题】:JavaScript/Ajax Write to FileJavaScript/Ajax 写入文件
【发布时间】:2017-02-26 07:16:18
【问题描述】:

我知道这个问题被问了很多,但这里的区别是我已禁用网络安全。 我正在创建一个永远不会在任何地方托管的 web 应用程序,以访问用户运行 chrome --disable-web-security --user-data-dir [webappdirectoryhere] 我知道这是多么不正统,但这只是一个小项目。

我正在使用这个 ajax 来访问一个本地文件(这在 chrome 中不起作用,除非你有一个正在运行的服务器,或者你只是像我一样禁用了网络安全):

function loadDoc(){
    $.ajax({url: "ajax_info.txt", success: function(result){
        var variablesArray = result.split(" ");
}});
}

所以我的问题是——除了写作而不是阅读,我可以做这样的事情吗?

编辑: 所以我真正想要的是一个与ajax相反的函数。并写出类似 (variable1 + " " + variable2) 注意:我想覆盖,而不是追加。

【问题讨论】:

标签: javascript jquery ajax google-chrome


【解决方案1】:

既然您说您不打算在任何地方托管它,您只需将代码移动到打包应用程序中即可。从那里你可以使用chrome.fileSystem api。

使用chooseEntry() 询问用户他们希望应用能够读取/写入哪个目录。在回调中检查返回的条目是否有效,然后将其存储以备后用。

var userDir = null;
chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(theEntry) {
   //do sanity check(s) and store it
   if(!theEntry.isDirectory) {
      //report error
      return;
   }
   userDir = theEntry;
});

一旦有了目录条目引用,就可以使用getFile() 获取对文件的引用,如果文件不存在则创建它,创建子目录也是如此,只需将getFile 替换为getDirectory。然后使用createWriter() 获取一个 FileWriter 实例来写入该文件。

function saveData(filename,data){
   if(!userDir) {
      //report error
      return;
   }

   userDir.getFile(filename, {create: true}, function(fileEntry) {
      if(!fileEntry || !fileEntry.isFile){
         //report error
         return;
      }

      fileEntry.createWriter(function(fileWriter) {
         fileWriter.onwriteend = function(e) {
            //report success
         };
         fileWriter.onerror = function(e) {
            //report error: e.toString()
         };

         //Create a Blob from the data and write it.
         var blob = new Blob([data], {type: 'text/plain'});
         fileWriter.write(blob);
      });
   });
}

//at some point after user has selected directory
saveData("log.txt","Some data");

检查各种文档以了解错误报告和其他必需品。

如果您只想向用户询问一次目录,请使用retainEntry() 保存目录条目的 id。并使用restoreEntry() 获取目录的引用。从那里只需执行 saveData 函数中的步骤即可。检查文档以了解其他过程,例如读取文件。

【讨论】:

  • 如果可能的话,我想避免走这条路。当然,如果一切都是本地的并且没有安全限制,我可以打开并写入像这样stackoverflow.com/questions/41116513/… 的文件?
  • @FatUglyProud 您可以安装php 并使用内置服务器。否则,不;使用 <a> 元素和 download 属性方法,或 chrome 应用程序。另请注意,--disable-web-security 标志不是必需的,您可以使用--allow-file-access-from-files,请参阅askubuntu.com/questions/160245/…stackoverflow.com/questions/37634049/…
  • @guest271314 我对download 的问题是无法将文件重定向到除了您的下载文件夹之外的任何地方,对吧?我也不喜欢它不会覆盖已经存在的文件的方式?无论如何围绕这些问题。我还需要--disable-web-security 来处理我正在做的其他事情;)
  • @FatUglyProud 你可以调整Settings,设置Download location到合适的目录,检查Ask where to save each file before downloading。在Save File 对话框中调整文件名。如果没有这些设置,单击或其他用户操作可能会将任何文件下载到用户文件系统,而用户可能不会意识到正在发生下载。
  • @guest271314 听起来很完美,但我迷路了。您是在谈论 Chrome 的设置吗?和菜单一样?
猜你喜欢
  • 2017-11-20
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多