W Chrome Apps, jestem pobieranie zawartości blob z serwera przy użyciu JavaScript XHR (kątowa $ HTTP GET w szczególności z odpowiedzi typu „blob”)Aplikacje Chrome: jak zapisywać zawartość bloba w systemie plików w tle?
Jak mam zapisać to do systemu plików Chrome aplikacji?
Obecnie używając kątowym opakowanie na HTML5 API systemu plików https://github.com/maciel310/angular-filesystem
nie chcę, aby pokazać użytkownikowi okienko (stąd nie mogę używać chrome.fileSystem. chooseEntry
)
chrome.fileSystem.requestFileSystem
API jest obsługiwany tylko przez Kiosk- tylko aplikacje. Dlatego używam API FileSystem HTML5 zamiast chrome.
Używam następującego kodu, aby XHR mógł pobrać obiekt typu 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) {
});
To jest moja metoda 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;
},
To pokazuje SECURITY_ERR
jak It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.
Jakie jest rozwiązanie tego problemu?
Próbowałem używać flagi --allow-file-access-from-files
podczas uruchamiania aplikacji. To nie pomaga.
Kiedy mówisz, że nie chcesz, aby pokazać popup.html po prostu nie znaczy, że nie ma popup wystąpić? Co oznacza, że skrypt ma być uruchamiany z karty wyświetlanej za pomocą metody kliknięcia? – wuno
Mam na myśli, że wideo powinno być automatycznie zapisywane w tle. nie powinno podpowiadać użytkownikowi, gdzie zapisać, co się dzieje z wyborem w przypadku wybrania mefhod –
, czy odpowiedź na drugie pytanie została przyjęta jako odpowiedź n? – wuno