HTML5特性system,基于HTML5 FileSystem API的使用介绍

HTML5的强大之一就是允许web程序申请一些临时或者永久的空间(Quota)在这里可以进行 数据的存储甚至文件的操作。

FileSystem提供了文件夹和文件的创建、移动、删除等操作,大大方便了数据的本地处理, 而且所有的数据都是在沙盒(sandboxed)中,不同的web程序不能互相访问,这就保证了数据 的完整和安全。

在CatWrite项目中,运用了HTML5的这个特性进行数据的存储,很是方便,只是目前来说只有 Chrome浏览器对FileSystem API支持的比较好,所以只能运行在Chrome浏览器中。

在完成这个功能的时候,查阅了很多资料,有一些资料是一年前的,但是随着浏览器版本的 变化,一些代码已经老化,在这里一一总结和整理。这里只列举了项目中用到的API,算是 对完成功能的一次梳理。

申请空间为了进行数据的存储,必须要向浏览器进行申请,如果是永久存储还会向用户进行询问,只有 同意后才会继续执行。

首先必须要声明想要的权限。

复制代码代码如下:

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; //文件系统请求标识

window.resolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL; //根据URL取得文件的读取权限

得到系统的权限后就可以向浏览器申请空间

复制代码代码如下:

window.requestFileSystem(window.PERSISTENT, //persistent(永久) or temporary(临时)

1024*1024, //1M

onInitFs, //成功后的回调函数

errorHandler); //错误后的回调函数

回调函数

复制代码代码如下:

function onInitFs(fs){

fs.root.getDirectory('catwrite_documents', {create: true}, function(dirEntry) {

console.log('You have just created the ' + dirEntry.name + ' directory.');

}, errorHandler);

}

//错误回调

function errorHandler(err){

var msg = 'An error occured: ';

switch (err.code) {

case FileError.NOT_FOUND_ERR:

msg += 'File or directory not found';

break;

case FileError.NOT_READABLE_ERR:

msg += 'File or directory not readable';

break;

case FileError.PATH_EXISTS_ERR:

msg += 'File or directory already exists';

break;

case FileError.TYPE_MISMATCH_ERR:

msg += 'Invalid filetype';

break;

default:

msg += 'Unknown Error';

break;

};

console.log(msg + err);

}

如果成功后悔调用OnInitFs回调函数,在里面用了getDirectory方法用来创建一个文件夹,这下面再说。

但是这是有个问题,这样做的话每次加载页面都会申请,这肯定不是我们想要的,我们要 的是在有数据的时候就可以读取数据。

判断是否申请过空间所以我们需要读取浏览器的数据,看看是否已有存储。这就用到了另一个API:

复制代码代码如下:

void queryUsageAndQuota(

in DOMString url,

in EntryCallback successCallback,

in optional ErrorCallback errorCallback

);

这个API可以查询当前web的空间情况,如果成功的话就会调用successCallback回调函数 并把已用空间和全部空间作为参数传入方法中。如果失败则调去errorCallback。

复制代码代码如下:

window.webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.PERSISTENT,

function(used, remaining){

if(remaining == ""){

console.log("未申请空间。");

}else{

console.log("已使用空间"+used);

console.log("全部空间"+remaining);

}

},

errorHandler);

我们可以通过判断remaining参数来判断是否有申请空间,如果没有申请,则返回上一步申请空间。 如果已经有空间的话,则需要得到空间的跟文件,这样才能操作数据。

获取文件入口FileSystem使用了特殊的文件系统和沙盒模式,在电脑上或者其他web中是无法访问沙盒中的文件的 ,只能用对应的格式去访问。

在浏览器中输入:

?filesystem:http://catcoder.com/persistent/

这样可以访问catcoder.com这个网站在本机永久数据,把persistent换成temporary则是读取临时空间。

然后我们就可以通过URL和对应API获取文件的入口(Lets you look up the entry for a file or directory with a local URL)。

复制代码代码如下:

void resolveLocalFileSystemURL(

in DOMString url,

in EntryCallback successCallback,

in optional ErrorCallback errorCallback

);

下面就可以读取本机存储的数据了

复制代码代码如下:

var url = "filesystem:http://" + window.location.host + "/persistent/catwrite_documents/";

window.resolveLocalFileSystemURL(url,function(fileEntry){

console.log(fileEntry);

var dirReader = fileEntry.createReader();

var readEntries = function(){

dirReader.readEntries(function(results){

if(!results.length){

create_file_title("默认文件", "");

console.log("没有文件!");

}else{

console.log("读取到" + results.length + "个文件");

for(var i = 0; i < results.length; i++){

console.log(results[i].name);

getFileContentByName(fileEntry, results[i].name);

}

}

},errorHandler);

};

readEntries();

},errorHandler);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FileSystem APIHTML5 的一部分,它提供了一种在客户端上创建和操作文件系统的方式。使用 FileSystem API,您可以创建、读取、写入、复制和删除文件和目录。 下面是一个简单的例子,展示如何使用 FileSystem API 创建一个名为“test.txt”的文件,写入一些文本,然后读取该文件的内容: ```javascript // 请求临时文件系统空间 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function(fs) { console.log('文件系统已准备好'); // 创建一个文件 fs.root.getFile('test.txt', {create: true}, function(fileEntry) { // 创建一个写入器 fileEntry.createWriter(function(writer) { // 写入一些内容 writer.write(new Blob(['Hello World'], {type: 'text/plain'})); // 读取文件内容 fileEntry.file(function(file) { var reader = new FileReader(); reader.onloadend = function() { console.log('文件内容:' + this.result); }; reader.readAsText(file); }); }, errorHandler); }, errorHandler); }, errorHandler); function errorHandler(e) { console.error('发生错误:' + e); } ``` 在此示例中,我们请求了临时文件系统(使用 `window.requestFileSystem`),然后创建了一个名为“test.txt”的文件,写入一些文本,最后读取该文件的内容并将其打印到控制台上。如果发生任何错误,将会调用 `errorHandler` 函数。 请注意,此示例是在浏览器中运行的。在 Node.js 等其他环境中,可能需要使用其他 API 或库来访问文件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值