目前只支持google浏览器
是<input type="file">的api,必须先由用户主动选取文件之后,才能获取这个文件的信息。
-------------------------------------------------------------------
硬盘
申请硬盘空间
目录
创建/打开目录 读取目录内容 删除目录
文件
读取文件 读取文件信息 切割文件
创建或打开文件 列出文件 获得选中项所在的目录
处理文件
内容
写入内容 读取内容 其他
相关事件
-------------------------------------------------------------------
硬盘
申请硬盘空间
//type 类型【TEMPORARY临时保存、PERSISTENT持久保存】
//size 大小,以字节为单位
//sunccessFunction 成功函数
//errorFunction 失败函数
window.requestFileSystem(type, size, sunccessFunction, errorFunction);//创建文件系统
//成功后保留引用
function sunccessFunction(fs){
hd = fs.root; //获得对根目录的引用,返回DirectoryEntry对象
var name = fs.name;//获得相关信息
}
目录
创建/打开目录
//{create: true, exclusive: false} create是否创建文件 exclusive如果创建已存在的文件,则返回错误
//sunccessFunction: function (dirEntry){}
hd.getDirectory(name, {create: true, exclusive: false}, sunccessFunction, errorFunction);//创建或打开目录
读取目录内容
var dirReader = dirEntry.createReader(); //读取指定目录中的项,返回directoryReader对象
//sunccessFunction: function(results) {}
dirReader.readEntries(sunccessFunction, errorFunction);//从选中目录总读取下一项 由于按块读取项列表,所以必须多次调用,直到返回对象为空
删除目录
dirEntry.removeRecursively(); //删除目录及内部所有内容
dirEntry.remove(successFunction, errorFunction);//删除目录,目录的内容必须为空,否则进入error
文件
读取文件
var reader = new FileReader();
//根据特殊的编码格式,将内容解读成文本。如果选择的是非文本文件,就会出现奇怪的字符。
reader.readAsText(file, encoding);
//读取Blob或File对象的每个直接。但该属性是非标准的,尽量不要使用!!
reader.readAsBinaryString(file);
//读取Blob或File内容,并形成URL数据
reader.readAsDataURL(file);
//读取Blob或File内容,并形成数据缓冲区
reader.readAsArrayBuffer(file);
以上方法是异步的。也就是说必须要挂载,实例下的 onload 或 onloadend 的方法处理转化后的结果。
reader.onloadend = function (e) {
//通过e.target.result获得src的内容
};
读取文件信息
file.name;//文件名
file.size;//文件大小
file.type;//文件类型
切割文件
//start 开始位置
//length 长度
//type 类型
file.slice(start, length, type);//切割文件
创建或打开文件
//sunccessFunction: function(fileEntry){}
dirEntry.getFile(name, {create: true, exclusive: false}, sunccessFunction, errorFunction); //同目录打开
列出文件
//sunccessFunction: function(files){}
dirReader.readEntries(successFunction, errorFunction);//从选中的目录中读取下一项。由于不能一次返回全部项,所以需要循环调用
获得选中项所在的文件
//sunccessFunction: function(parent){}
dirEntry.getParent(successFunction, errorFunction);
处理文件
//移动文件
//parent:新位置
//newName:如果存在,就更新名字
fileEntry.moveTo(parent, newName, successFunction, errorFunction);
//复制文件
//parent:新位置
//newName:如果存在,就更新名字
fileEntry.copyTo(parent, newName, successFunction, errorFunction);
//删除文件
fileEntry.remove(successFunction, errorFunction);
内容
写入内容
//返回相关的fileWriter对象
//sunccessFunction: function(fw){}
fileEntry.createWriter(successFunction, errorFunction);
fw.write(data); //写入数据
获得需要写入的数据
//创建对象
var blob = new BlobBuilder();
blob.append(text); //追加文字
fw.write(blob.getBlob()); //转换数据格式
读取内容
//sunccessFunction: function(file){}
fileEntry.file(successFunction, errorFunction);//返回相关的file对象
创建读取的对象进行读取
var reader = new FileReader();
reader.readAsText(file);
reader.onload = success;
其他
fw.seek(offset); //设置添加内容的位置。offset应该以字节声明
fw.truncate(size);//根据size的值修改文件的长度
fw.position; //返回下一个写入的位置
fw.length; //返回文件的长度
事件
writeStart//开始写入
progress
write //完全写入后的事件
abort //写入终止
error
writeend //写入结束
相关事件
onload
onloadstart
onloadend
onabort
onerror
参考: HTML5精粹