以DataURL方式读取文件:FileSystem对象
在二进制文件读取的范例中,增加文件类型判断代码,再修改reader.readAsDataURL(file);
文件类型判断
if(!/image\/\w+/.test(file.type)){
myDiv.innerHTML="<h2>请选择图像文件!</h2>";
return false;
}
浏览器自身的沙箱机制(安全)会限制浏览器脚本去操作本地文件系统。FileSystem对象的出现改变了这一状况。
可以阅读、浏览、编辑和操作本地文件。
当前只有Chrome完整地支持了FileSystem API。主要功能有三:
- 读取和处理文件:File/Blob、FileList、FileReader。
- 创建和写入:BlobBuilder、FileWriter。
- 目录和文件系统访问:DirectoryReader、FileEntry/DirectoryEntry、LocalFileSystem。
1)请求文件系统
window.requestFileSystem()请求对沙盒文件系统的访问权限
/window.webkitRequestFileSystem
四个参数:
type 文件存储是否应该持久(window.TEMPORARY当浏览器需要更多空间时可自行决定是否删除该文件/window.PERSISTENT需要获得用户或应用的明确授权才可以删除)
size 文件大小,以字节为单位
successCallback 文件系统请求成功后的回调函数,参数为FileSystem对象
errorCallback 请求失败或错误时的回调函数,参数为FileError对象
<!DOCTYPE html>
<html>
<head>
<title>7.4.1.html</title>
<meta charset="utf-8">
<script type="text/javascript">
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler);
function onInitFs(fs){
alert("File created completely, file name is : "+ fs.name);
}
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 += 'Invalide File type.';
break;
default:
msg += 'Unknown Error.';
break;
}
console.log(msg);
};
</script>
</head>