当前位置: 首页 > 面试题库 >

Chrome应用程序:如何在后台将Blob内容保存到fileSystem?

梁晋鹏
2023-03-14
问题内容

在Chrome应用中,我正在使用JavaScript XHR(尤其是角度$ http GET,响应类型为“ blob”)从服务器下载blob内容

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

当前在HTML5文件系统API上使用Angular包装器 https://github.com/maciel310/angular-
filesystem

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

chrome.fileSystem.requestFileSystem仅Kiosk专用应用程序支持该API。因此,我使用的是HTML5
FileSystem 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;
},

这显示SECURITY_ERRIt was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.

有什么解决方案?

--allow-file-access-from-files在启动应用程序时尝试使用标志。没有帮助


问题答案:

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

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

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

这样可以成功将文件保存在目录下/new/



 类似资料:
  • 问题内容: 我有一个内容脚本,该脚本使用XHR下载一些二进制数据,该数据稍后发送到后台脚本: 在后台脚本中接收到此数据后,我想形成另一个XHR请求,将该请求上传到我的服务器,所以我这样做: 问题是上传到服务器的文件仅包含以下字符串:“ [object Object]”。我猜发生这种情况是因为ArrayBuffer类型从内容过程转移到后台时以某种方式丢失了吗?我该如何解决? 问题答案: 在内容脚本和

  • 我正在开发一个简单的Cordova应用程序,该应用程序从特定网站获取新闻提要,用户可以通过该应用程序查看这些新闻。 问题是,我如何实现以下场景:当网站上发布任何新提要时,我想通知移动设备,当应用程序不在前台甚至关闭时,新提要在这里。 注意:我不是本地移动应用程序开发人员。

  • 如何在应用程序关闭后保存arraylist。这是我的环球班 这是我的旅行班 我想保存数组列表,当我关闭和打开应用程序的数组列表(所有旅行)被保存。如何做到这一点? 我想使用共享首选项,但我不知道如何做到这一点,因为它不是带有Trip的字符串it数组列表。有人能帮我在共享首选项中保存arraylist吗?

  • 我最近在学习如何阅读

  • 问题内容: 我刚刚从Redis和Rails开始,所以这可能是一个愚蠢的问题。 我正在尝试将哈希保存到Redis服务器,但是当我检索它时,它只是一个字符串IE。 这显然是错误的,因为它以字符串形式返回。 我也尝试循环一些结果并使用hset即。 不知道要去哪里。我删除了键$ redis.del(’data’)以确保这不是问题。 希望你能提供建议,李 问题答案: 我应该更仔细地阅读redis文档。 回答

  • 我目前设法允许用户在两个不同的活动组(比如说4个活动类A/B组和X/Y组)之间切换,并通过FLAG,但我注意到有一些奇怪的行为: 如何防止应用程序从返回时隐藏到后台? 我注意到它只发生在同一个类中(和是同一个类),如果我使用和,就不会出现这样的问题,我想知道背后的原因是什么。 和