Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome应用程序:如何在后台将blob内容保存到文件系统?_Javascript_Angularjs_Google Chrome_Google Chrome App_Html5 Filesystem - Fatal编程技术网

Javascript Chrome应用程序:如何在后台将blob内容保存到文件系统?

Javascript Chrome应用程序:如何在后台将blob内容保存到文件系统?,javascript,angularjs,google-chrome,google-chrome-app,html5-filesystem,Javascript,Angularjs,Google Chrome,Google Chrome App,Html5 Filesystem,在Chrome应用程序中,我使用JavaScript XHR从服务器下载blob内容(特别是$http GET,响应类型为“blob”) 如何将其保存到chrome应用程序的文件系统 目前正在HTML5文件系统API上使用角度包装器 我不想向用户显示弹出窗口(因此我不能使用chrome.fileSystem.chooseEntry) chrome.fileSystem.requestFileSystemAPI仅受仅适用于Kiosk的应用程序支持。 因此,我使用HTML5文件系统API而不是ch

在Chrome应用程序中,我使用JavaScript XHR从服务器下载blob内容(特别是$http GET,响应类型为“blob”)

如何将其保存到chrome应用程序的文件系统

目前正在HTML5文件系统API上使用角度包装器

我不想向用户显示弹出窗口(因此我不能使用
chrome.fileSystem.chooseEntry

chrome.fileSystem.requestFileSystem
API仅受仅适用于Kiosk的应用程序支持。 因此,我使用HTML5文件系统API而不是chrome

我使用下面的代码来生成XHR以获取blob

 $http({
          url: SERVER_URL+"/someVideo.mp4",
          method: "GET",
          responseType: "blob"
      }).then(function(response) {
          console.log(response);
          fileSystem.writeBlob(response.name, response).then(function() {
             console.log("file saved");
          }, function(err) {
              console.log(err);
          });
      }, function (response) {

      });
这是我的writeBlob方法

writeBlob: function(fileName, blob, append) {
    append = (typeof append == 'undefined' ? false : append);

    var def = $q.defer();

    fsDefer.promise.then(function(fs) {

        fs.root.getFile(fileName, {create: true}, function(fileEntry) {

            fileEntry.createWriter(function(fileWriter) {
                if(append) {
                    fileWriter.seek(fileWriter.length);
                }

                var truncated = false;
                fileWriter.onwriteend = function(e) {
                    //truncate all data after current position
                    if (!truncated) {
                        truncated = true;
                        this.truncate(this.position);
                        return;
                    }
                    safeResolve(def, "");
                };

                fileWriter.onerror = function(e) {
                    safeReject(def, {text: 'Write failed', obj: e});
                };

                fileWriter.write(blob);

            }, function(e) {
                safeReject(def, {text: "Error creating file", obj: e});
            });

        }, function(e) {
            safeReject(def, {text: "Error getting file", obj: e});
        });

    }, function(err) {
        def.reject(err);
    });

    return def.promise;
},
这显示了
安全性\u ERR
因为
确定某些文件在Web应用程序中访问不安全,或者对文件资源进行了太多调用。

解决这个问题的办法是什么


我已尝试在启动应用程序时使用
--允许从文件访问文件
标志。它没有帮助。

Chrome应用程序的沙盒存储不允许将文件存储在根目录中(即
/

修改代码以将其保存在其下的特定子目录中。 例如—

fileSystem.writeBlob("/new"+response.name, response).then(function() {
             console.log("file saved");
          }, function(err) {
              console.log(err);
          });

这将成功地将文件保存在
/new/
目录下。

要对此进行扩展,下面是一个完整的示例应用程序,介绍如何下载文件并保存blob并将其显示回用户


当你说你不想显示弹出窗口时。html你是说你不想出现弹出窗口吗?这意味着您需要脚本从单击方式查看的选项卡运行?我的意思是视频应该自动保存在后台。它不应该提示用户保存到哪里,这在choosEntry mefhoddid中发生。您是否接受另一个问题的答案作为n答案?您是否有一个匹配模式,在清单的“权限”字段中为您提供服务器URL的主机权限?(我一时想不起来这是否与应用程序相关;很可能是一个扩展)这有记录吗?@Xan不幸没有!我在一个论坛上发现了这个(阅读Joe Marini的回复-第二行)嗯,可能是错误的主题?包目录项是完全只读的。嗯。。对“据我所知,这在任何地方都没有记录在案。”Xan报道!