HTML5 本地文件操作之FileSystemAPI简介
一、FileSystemAPI简介
HTML5的文件操作Api中
1.FileAPI,用于基础的客户端本地文件读取,目前大多数接口已经被主流浏览器支持,点击查看更多参考
2.FileSystemAPI,网络应用可以创建、读取、导航用户本地文件系统中的沙盒部分以及向其中写入数据。
API如下:
文件操作:File/Blob,FileList,FileReader,FileWriter
目录文件系统访问:DirectoryReader,FileEntry/DirectoryEntry,FileSystem,LocalFileSystem
二、浏览器支持与存储限制
1.当前测试时只有Google浏览器支持也就是webkit内核
Opera仅支持FileAPI IE不支持 Safari不支持 Firefox仅支持FileAPI Chrome/Chromium浏览器支持。
2.应用在进行文件操作时,必须先请求系统上存储数据配额,尤其针对PERSISTENT持久存储需要用户点击确认,如果用户拒绝文件访问失败
不过,可使用--unlimited-quota-for-files
标记运行Chrome浏览器进行测试。此外,如果您要开发的是用于Chrome网上应用店的应用或扩展程序,可使用unlimitedStorage
清单文件权限,而无需请求配额。最后,用户会收到授予、拒绝或为应用增加存储的权限对话框。
如果您要通过 file://
调试您的应用,可能需要--allow-file-access-from-files
标记。不使用这些标记会导致SECURITY_ERR
或QUOTA_EXCEEDED_ERR
FileError。(此问题,当时测试没起作用。)
3.FileSystem 规范还定义了计划用于WebWorkers的同步API(LocalFileSystemSync
)接口。不过,测试Demo中不涉及该同步API。
三、请求文件系统
网络应用可通过调用window.requestFileSystem()
请求对沙盒文件系统的访问权限:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 5 * 1024, initFs, errorHandler);
参数说明:
1.type:文件存储是否应该是持久的。可能的值包括window.TEMPORARY、window.PERSISTENT
console.info(window.TEMPORARY); //0 临时
console.info(window.PERSISTENT); //1 持久
通过TEMPORARY
存储的数据可由浏览器自行决定删除(例如在需要更多空间的情况下)。要清除PERSISTENT
存储,必须获得用户或应用的明确授权,并且需要用户向您的应用授予配额。请参阅请求配额。
2.size:引用需要用于存储的大小(单位:字节)。
3.successCallback:文件系统请求成功时回调。参数为FileSystem对象
3.errorCallback:用于处理错误或过去文件系统请求被拒绝的可选回调。参数为FileError对象(测试时,还不是这个对象,只有返回异常的文本内容)。
如果您是首次调用requestFileSystem()
,系统会为您的应用创建新的存储。请注意,这是沙箱文件系统,也就是说,一个网络应用无法访问另一个应用的文件。这也意味着您无法在用户硬盘上的任意文件夹(例如“我的图片”、“我的文档”等)中读/写文件。
用法示例1,请求临时存储
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 5 * 1024, initFs, errorHandler);
function initFs(fs) {
//fs为FileSystem对象
}
function errorHandler(err) {
console.info('创建文件失败');
console.info(err);
}
用法示例2,请求持久存储:
求存储配额要使用 PERSISTENT 存储,您必须向用户取得存储持久数据的许可。由于浏览器可自行决定删除临时存储的数据,因此这一限制不适用于 TEMPORARY 存储。
为了将 PERSISTENT 存储与 FileSystem API 配合使用,Chrome 浏览器使用基于 window.webkitStorageInfo 的新 API 以请求存储
//如果使用持久存储,需要使用requestQuota
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
//当前请求存储空间,如果不修改大小的话,只需要请求一次就可以了
window.webkitStorageInfo.requestQuota(window.PERSISTENT, 1024 * 1024 * 5, function (gratedBytes) {
console.log('请求成功的空间:' + gratedBytes);
window.requestFileSystem(window.PERSISTENT, gratedBytes, initFs, errorHandler);
}, errorHandler); function initFs(fs) {
//
}
function errorHandler(err) {
console.error(err);
//console.info(typeof FileError);//FileError 目前不可用或已经放弃
console.info('创建文件是失败');
}
用户授予许可后,就不必再调用requestQuota()
了。如果修改了请求配额大小,会再次弹出提示框,提示用户授权。
后续调用为无操作指令。您还可以使用 API 查询源的当前配额使用情况和分配情况:window.webkitStorageInfo.queryUsageAndQuota()
使用文件沙盒环境中的文件通过FileEntry
接口表示。
FileEntry 包含标准文件系统中会有的属性类型(name
、isFile
...)和方法(remove
、moveTo
、copyTo
...)
更多整理:
参考文章:
http://www.cnblogs.com/zhwl/p/3201975.html
http://blog.csdn.net/qq_27626333/article/details/51823120
HTML5 本地文件操作之FileSystemAPI简介的更多相关文章
- HTML5 本地文件操作之FileSystemAPI实例(一)
文件操作实例整理一 1.请求系统配额类型 console.info(window.TEMPORARY); //0 临时 console.info(window.PERSISTENT); //1 持久 ...
- HTML5 本地文件操作之FileSystemAPI整理(二)
一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...
- HTML5 本地文件操作之FileSystemAPI整理(一)
一.请求配额 DeprecatedStorageInfo对象 window.webkitStorageInfo:当使用持久存储模式时需要用到该对象的接口 方法: 1.requestQuota(type ...
- HTML5 本地文件操作之FileSystemAPI实例(四)
目录操作Demo二 1.删除目录 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSyst ...
- HTML5 本地文件操作之FileSystemAPI实例(三)
文件夹操作demo 1.读取根目录文件夹内容 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFi ...
- HTML5 本地文件操作之FileSystemAPI实例(二)
文件操作实例整理二 1.删除文件.复制文件.移动文件 //获取请求权限 window.requestFileSystem = window.requestFileSystem || window.we ...
- 【Egret】实现web页面操作PC端本地文件操作
Egret 实现web页面操作PC端本地文件操作: http://edn.egret.com/cn/book/page/pid/181 //------------------------------ ...
- H5读取本地文件操作
H5读取本地文件操作 本文转自:转:http://hushicai.com/2014/03/29/html5-du-qu-ben-di-wen-jian.html感谢大神分享. 常见的语言比如php. ...
- html5之文件操作
用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...
随机推荐
- NET Core中使用Angular2的Token base身份认证
下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angula ...
- 【AtCoder】AGC021
A - Digit Sum 2 从高位到低位数的第i位以前前缀都相同,第i位比当前位上的数小1的情况下,后面都填9 枚举一下然后计算最大的就好 #include <bits/stdc++.h&g ...
- RN Android全面屏适配
像现在市面上新出的手机,例如华为P30 pro,小米9,iPhone XS MAX,屏占比都惊人的达到90%以上,这些手机具备了以下几个特点 大,屏占比高,长宽比都不再是16:9,都达到了19.5:9 ...
- AngularJS + ui-router + RequireJS异步加载注册controller/directive/filter/service
一般情况下我们会将项目所用到的controller/directive/filter/sercive预先加载完再初始化AngularJS模块,但是当项目比较复杂的情况下,应该是打开对应的界面才加载对应 ...
- JavaWeb中Tomcat与Eclipse的集成—步骤详解
前面会简单介绍,下翻Tomcat与Eclipse的集成 一.先介绍一下应用程序的结构: 1.到目前为止应用程序物理结构有两种: C/S——Client / server:这种结构的应用,客户端与服务端 ...
- 网络与多线程---OC中多线程方法GCD(二)
小编在前一篇中介绍了多线程实现的五种常用方法.在接下来所介绍的这种方法是最具有魅力的,最具有诱惑的实现多线程的方案---GCD 一.什么是GCD GCD是Grand Central Dispatch的 ...
- hdu 4445 37届金华赛区 D题
题意:给一个坦克的高度,求炮弹能打中最多的数量 枚举角度,作为一名学霸虽然很快推出了公式,但是却没有考虑到,角度可以朝下的情况 #include<cstdio> #include<i ...
- svn简单记录
记录一下工作中常用到的svn命令 一.文件的提交流程 1.svn up // 先更新本地文件 2.svn st // svn status 查看要提交的文件 3.#svn ci -m &quo ...
- Ubuntu下实现软路由(转)
参考:http://www.openwrt.pro/post-292.html 个人看法: 1.实现路由在Linux下必须要用到iptables进行转发,这才是路由核心. 2.我觉得对于Linux来说 ...
- SuperPro 3000U 编程器电源部分