在本地处理文件(JavaScript / HTML5等)

时间:2017-04-24 07:45:14

标签: javascript html5 filesystems

所以,我一直在寻找一个解决方案,但是有各种各样的答案,我仍然不知道如何解决这个问题。

我正在为chrome(仅)开发一个基于JavaScript的桌面应用程序,其中用户离线可以上传文件,这些文件将在以后连接到Web时发送到服务器(这由csFTPQuick.FTP组件完成)。

事情是,同时这个文件应该保存在某个地方,我不在乎新名称。现在,我不确定JavaScript是否可以处理它,遗憾的是我找到的JS解决方案基于ActiveX,我需要它用于Chrome。有没有Chrome平行于MS File.Move?

我知道HTML5可以通过FileSystem API来处理它,然后该文件被沙盒化,但事实是我不知道它意味着什么和/或如何做。

最重要的是,我需要的是用户能够使用普通的HTML文件按钮选择文件,一旦提交,该文件将被复制到另一个不同名称的位置。一旦到达那里,FTP组件将在用户上线时将其上传到服务器。

有人能引用我的代码示例吗?我很失落,我真的需要这个功能。

非常感谢!

2 个答案:

答案 0 :(得分:0)

  

我知道HTML5可以通过FileSystem API来处理它,然后该文件被沙盒化,但事实是我不知道它意味着什么和/或如何做。

这意味着它可以访问的文件系统被锁定远离系统的其他部分。代码无法写入计算机的主目录结构。浏览器外部的代码无法访问沙箱文件系统。

简而言之:这意味着它对您的问题没有帮助。

  

是否有任何Chrome与MS File.Move平行?

没有

浏览器旨在使用网络数据和不受信任的代码处理网页。他们严格限制用户可以触摸用户的电脑。

您无法在典型的浏览器环境中实现所需。

考虑使用类似node-webkit or electron的内容来构建您的应用。您可以为NodeJS应用程序编写基于HTML的前端。它确实导致需要安装的完整应用程序,用户只需访问HTML文档即可轻松启动和运行,但它没有相同的安全限制。

答案 1 :(得分:-1)

document.querySelector('#myfile').onchange = function(e) {
  var files = this.files;

  window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
    // Duplicate each file the user selected to the app's fs.
    for (var i = 0, file; file = files[i]; ++i) {

      // Capture current iteration's file in local scope for the getFile() callback.
      (function(f) {
        fs.root.getFile(f.name, {create: true, exclusive: true}, function(fileEntry) {
          fileEntry.createWriter(function(fileWriter) {
            fileWriter.write(f); // Note: write() can take a File or Blob object.
          }, errorHandler);
        }, errorHandler);
      })(file);

    }
  }, errorHandler);

};

来自:https://www.html5rocks.com/en/tutorials/file/filesystem/