【发布时间】:2014-08-27 05:24:14
【问题描述】:
我有this fiddle(运行小提琴时请使用谷歌浏览器)。
我想知道如何使用 HTML 5 文件系统 API 正确实现这一点。
用例: 在沙箱文件系统 API 中附加某些内容时,我想首先检查现有文件的文件大小是否超过特定阈值级别。如果是,请重命名或删除文件。
$(document).ready(function () {
var messages = "A sample text!";
navigator.webkitPersistentStorage.requestQuota(1024 * 1024, function (availBytes) {
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.PERSISTENT, availBytes, function (fs) {
fs.root.getFile("sample.txt", {
create: true
}, function (file) {
console.log("file.name =" + file.name);
console.log("file.fullPath =" + file.fullPath);
file.getMetadata(function (md) {
//1. check the file size first (md.size)
//2. if file size > 100KB
// 2.1 delete the existing file or rename it
// 2.2 create a new file
// else
// 3 create a new file
}, this.onError);
file.createWriter(function (fileWriter) {
fileWriter.onerror = function (e) {
console.log('Write failed: ' + e.toString());
};
fileWriter.seek(fileWriter.length); // Start write position at EOF.
var blob = new Blob([messages], {
type: 'plain/text'
});
fileWriter.write(blob);
}, this.onError);
}, this.onError);
}, this.onError); //end window.requestFileSystem
}, function (e) {
console.log('Error', e);
});
function onError(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
});
我用过
file.getMetadata(function (md) {
//1. check the file size first (md.size)
//2. if file size > 100KB
// 2.1 delete the existing file or rename it
// 2.2 create a new file
// else
// 3 create a new file
}, this.onError);
但我很困惑如何防止 createwriter 运行,因为它们在同一个回调函数上。
我想知道如何正确排序我的代码,以便在追加之前先检查现有文件的文件大小。
FileEntry 接口上有很多回调函数,我很困惑是要放置它们还是一次性使用它们。
fs.root.getFile('sample.txt', {create: true, exclusive: true}, function(fileEntry) {
//fileEntry.getMetadata(successCallback, opt_errorCallback);
//fileEntry.remove(successCallback, opt_errorCallback);
//fileEntry.moveTo(dirEntry, opt_newName, opt_successCallback, opt_errorCallback);
//fileEntry.copyTo(dirEntry, opt_newName, opt_successCallback, opt_errorCallback);
//fileEntry.getParent(successCallback, opt_errorCallback);
//fileEntry.toURL(opt_mimeType);
}, errorHandler);
}
file.createWriter(function (fileWriter) {})
【问题讨论】:
-
Filesystem API 似乎是一堆回调函数。这是否意味着为了完成我想做的事情,我必须使用这些回调函数来操作所有内容?不过我只是想确认一下。
标签: jquery html google-chrome-extension filesystems html5-filesystem