【问题标题】:Writing to a file in Javascript using FileSystem Api使用 FileSystem Api 在 Javascript 中写入文件
【发布时间】:2014-07-24 09:47:59
【问题描述】:

我正在尝试使用 Chrome 中的 FileSystem API 写入本地文件系统。执行时出现以下错误

FileError 已弃用。请使用 DOMError 的 'name' 或 'message' 属性而不是 'code'。

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

var fs = null;

function errorHandler(e) {
  alert("hi");
  var msg = '';
  switch (e.code) {    //Error is being reported here
    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;
  }
}

function onInitFs(fs) {
  alert("hi");

  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.');
      };

      fileWriter.onerror = function(e) {
        console.log('Write failed: ' + e.toString());
      };

      // Create a new Blob and write it to log.txt.
      var blob = new Blob(['Add some text'], {type: 'text/plain'});

      fileWriter.write(blob);
    }, errorHandler);
  }, errorHandler);
}

function initFS(){
  window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);
}

if (window.requestFileSystem) {
  initFS();
}

因为我知道执行到errorHandler 方法,所以我假设我在调用requestFileSystem() 方法时做错了。我真的很感谢这里的帮助。提前致谢

进一步的研究表明,它因安全错误而失败。我如何基本上绕过它

【问题讨论】:

  • 在我的 Chrome 中,这不是错误,而是警告,并且调用了 onInitFs()(至少我收到了警报)。无论如何,正如消息告诉你的那样,你不应该使用 FileError 本身;此外,您使用的整个 FileSystem API 是 'abandoned' 并且仅适用于 Chrome。相反,使用File API 访问本地文件。
  • @Bewusstsein onInitFs() 未被调用。它以 ErrorHandler 方法终止
  • @Bewusstsein 虽然 FileSystem API 确实在其他地方被放弃了,但 File API 绝不是替代品。他们有非常不同的角色。
  • @Bewusstsein 此外,Chrome Apps 文档中明确引用了 API 作为文件存储方法。
  • @user3851662 对,我认为您的问题是您收到的警告。

标签: javascript html google-chrome google-chrome-extension


【解决方案1】:

如果您在本地访问脚本(通过 file:///),您需要使用“--allow-file-access-from-files”标志启动 Chrome,如下所示:

C:\Path\To\Chrome.exe --allow-file-access-from-files

source, source

如果您在 Chrome 应用程序中执行此操作,则需要将 fileSystem-permissions 添加到您的 manifest.json:

{
    "manifest_version": 2,
    "name": "...",
    "version": "...",  
    "minimum_chrome_version": "23",
    "permissions": [
        {
            "fileSystem": ["write"]
        }
    ]
}

source

要删除您收到的警告,只需使用e.name 和/或e.message 而不是e.code

function errorHandler(e) {
    alert(e.name + ": " + e.message);
}

【讨论】:

    【解决方案2】:

    似乎您的 errorHandler 无论如何都没有对 msg 做任何事情。试试这个:

    function errorHandler(e) {  console.log("ERROR!: name: [" + e.name + "] message: [" + e.message + "]");  }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多