小赖子的英国生活和资讯

通过HTML5 下的 FileReader 读文件

阅读 桌面完整版

HTML5出来之前, 浏览器里想要读取本地文件那可谓是很难很难的, 因为网页就像一个沙盒子, 读本地文件就被认为是越权的不安全的恶意行为, 当年的JAVA APPLET 还有 FLASH在这方面文件读取功能都做了限制了.

但有时候用户选择一个本地文件, 就想简单在本地做个裁剪 选择 或者其它一些简单的调整后才上传到服务器, 也有可能改变主意就不上传了, 如果在网页里没有这些功能的话就比较麻烦 都得把文件上传到服务器上 浪费了网络带宽和服务器资源. 还好HTML5提供了一些本地读取文件的标准.

首先 你得先判断 你的浏览器是否支持 文件读取:

1
2
3
4
5
if (window.File && window.FileReader && window.FileList && window.Blob) {
    // 可以读
} else {
    alert('需要 HTML5 的浏览器才能使用 本地文件读取');
}
if (window.File && window.FileReader && window.FileList && window.Blob) {
    // 可以读
} else {
    alert('需要 HTML5 的浏览器才能使用 本地文件读取');
}

然后 只能通过用户手动来选择文件而没有办法直接指定本地文件路径 因为直接曝露本地文件路径相对不安全而且有损隐私. 而当用户选定了一个文件的时候 网页代码里也只能得到一个假的不存在的路径 比如 C:\FakePath\文件

1
<input type="file" accept="*" name="upload_file" id="upload_file" />
<input type="file" accept="*" name="upload_file" id="upload_file" />

当用户选择了文件 我们就可以在 OnLoad 事件里大做文章了:

1
2
3
4
5
6
7
8
var r = new FileReader(); 
var file = document.getElementById('upload_file').files[0];
r.onload = function() {
   // 文件数据已经得到了
   alert('file size = ' + r.result.length);
   process(r.result); 
}
r.readAsDataURL(file); // 读成 BASE64
var r = new FileReader(); 
var file = document.getElementById('upload_file').files[0];
r.onload = function() {
   // 文件数据已经得到了
   alert('file size = ' + r.result.length);
   process(r.result); 
}
r.readAsDataURL(file); // 读成 BASE64

可以通过 readAsDataURL 读取成 BASE64 格式 (适合二进制) 也可以通过 readAsText 读成文本. 这样一看 代码量很少 功能却很强大.

示例

可以访问这个页面 来转换本地任意文件成 BASE64 格式.

英文: How to Read Local Files using HTML5 FileReader?

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version