Моя идея - использовать <input type="file">
для загрузки файла, затем через webkitRequestFileSystem
сохранить в FileSystem
, как это ...
body.innerHTML = `<input type="file">`;
body.children[0].addEventListener("change", copyFiles);
...
function copyFiles() {
for (var i = 0; i < this.files.length; i++) {
(function (f) {
navigator.webkitPersistentStorage.queryUsageAndQuota(function (usage, granted) {
if ((granted - usage) < f.size) {
navigator.webkitPersistentStorage.requestQuota((granted + f.size), function () {
createFile(f);
}, errorHandler);
} else {
createFile(f);
}
});
})(this.files[i]);
}
}
...
function createFile(file) {
window.webkitRequestFileSystem(window.PERSISTENT, (file.size * 1.1), function (fileManager) {
fileManager.root.getFile(file.name, {create: true, exclusive: true}, function (fileEntry) {
fileEntry.createWriter(function (fileWriter) {
fileWriter.write(file);
}, errorHandler);
}, errorHandler);
}, errorHandler);
}
И это работает, теперь я хочу использовать сервисный работник для чтения и отправки небольших пакетов содержимого этих файлов на мой сервер.
Я новичок в Сервисе Работники и я пытались, но я получил self.webkitRequestFileSystem is not a function
Активация Service Worker ...
window.addEventListener("load", function () {
if ('serviceWorker' in navigator) {
window.addEventListener("message", function(e){
console.log(e);
});
navigator.serviceWorker.register('js/swa.js').then(function (swr) {
swr.sync.register('syncTest');
}).catch(function (error) {
console.log(error);
});
} else {
console.log("Service Worker", "Not available.");
}
});
И скрипт ServiceWorker
function getAllEntries(dirReader) {
var entries = dirReader.readEntries();
for (var i = 0, entry; entry = entries[i]; ++i) {
paths.push(entry.toURL()); // Stash this entry's filesystem: URL.
// If this is a directory, we have more traversing to do.
if (entry.isDirectory) {
getAllEntries(entry.createReader());
}
}
}
self.addEventListener('sync', function (event) {
try {
var fs = self.webkitRequestFileSystem(self.PERSISTENT, 1024 * 1024 /*1MB*/);
getAllEntries(fs.root.createReader());
self.postMessage({entries: paths});
} catch (e) {
console.log(e);
}
});