html5中文学习网

您的位置: 首页 > html5教程 > 高级应用 » 正文

HTML5实现预览本地图片 _html5教程技巧

[ ] 已经帮助:人解决问题

问题描述n6CHTML5中文学习网 - HTML5先行者学习网
假设我们在 HTML 里面有一个图片上传控件: n6CHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
n6CHTML5中文学习网 - HTML5先行者学习网
<input id="upload_image" type="file" name="image" accept="image/*" /> n6CHTML5中文学习网 - HTML5先行者学习网
n6CHTML5中文学习网 - HTML5先行者学习网

注意这个 accept="image/*" 非常重要,它指定了上传的是图片,在移动端的时候会关联到系统的弹窗选择类型等问题,务必加上。 n6CHTML5中文学习网 - HTML5先行者学习网
然后,问题是,我们在没有提交这个表单到服务器之前,有没有办法把图片的内容读取出来呢? n6CHTML5中文学习网 - HTML5先行者学习网
看似简单,都是客户端的文件,应该是可以的,但在之前确实没什么好办法,但是自从有了HTML5,这个功能又回来了,通过FileReader可以轻松的实现这个功能。 n6CHTML5中文学习网 - HTML5先行者学习网
例子说明问题 n6CHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
n6CHTML5中文学习网 - HTML5先行者学习网
$(function() { n6CHTML5中文学习网 - HTML5先行者学习网
$('#upload_image').change(function(event) { n6CHTML5中文学习网 - HTML5先行者学习网
// 根据这个 <input> 获取文件的 HTML5 js 对象 n6CHTML5中文学习网 - HTML5先行者学习网
var files = event.target.files, file; n6CHTML5中文学习网 - HTML5先行者学习网
if (files && files.length > 0) { n6CHTML5中文学习网 - HTML5先行者学习网
// 获取目前上传的文件 n6CHTML5中文学习网 - HTML5先行者学习网
file = files[0]; n6CHTML5中文学习网 - HTML5先行者学习网
// 来在控制台看看到底这个对象是什么 n6CHTML5中文学习网 - HTML5先行者学习网
console.log(file); n6CHTML5中文学习网 - HTML5先行者学习网
// 那么我们可以做一下诸如文件大小校验的动作 n6CHTML5中文学习网 - HTML5先行者学习网
if(file.size > 1024 * 1024 * 2) { n6CHTML5中文学习网 - HTML5先行者学习网
alert('图片大小不能超过 2MB!'); n6CHTML5中文学习网 - HTML5先行者学习网
return false; n6CHTML5中文学习网 - HTML5先行者学习网
} n6CHTML5中文学习网 - HTML5先行者学习网
// !!!!!! n6CHTML5中文学习网 - HTML5先行者学习网
// 下面是关键的关键,通过这个 file 对象生成一个可用的图像 URL n6CHTML5中文学习网 - HTML5先行者学习网
// 获取 window 的 URL 工具 n6CHTML5中文学习网 - HTML5先行者学习网
var URL = window.URL || window.webkitURL; n6CHTML5中文学习网 - HTML5先行者学习网
// 通过 file 生成目标 url n6CHTML5中文学习网 - HTML5先行者学习网
var imgURL = URL.createObjectURL(file); n6CHTML5中文学习网 - HTML5先行者学习网
// 用这个 URL 产生一个 <img> 将其显示出来 n6CHTML5中文学习网 - HTML5先行者学习网
$('body').append($('<img/>').attr('src', imgURL)); n6CHTML5中文学习网 - HTML5先行者学习网
// 使用下面这句可以在内存中释放对此 url 的伺服,跑了之后那个 URL 就无效了 n6CHTML5中文学习网 - HTML5先行者学习网
// URL.revokeObjectURL(imgURL); n6CHTML5中文学习网 - HTML5先行者学习网
} n6CHTML5中文学习网 - HTML5先行者学习网
}); n6CHTML5中文学习网 - HTML5先行者学习网
}); n6CHTML5中文学习网 - HTML5先行者学习网
n6CHTML5中文学习网 - HTML5先行者学习网

简要说明 n6CHTML5中文学习网 - HTML5先行者学习网
简单来说整个操作设计如下几步: n6CHTML5中文学习网 - HTML5先行者学习网
1.通过 <file> 的 change 事件触发事件,并且获取 event 对象; n6CHTML5中文学习网 - HTML5先行者学习网
2.通过 event 对象获取上传的文件的 js 对象 file ; n6CHTML5中文学习网 - HTML5先行者学习网
3.通过 window.URL 工具从 file 对象生成一个可用的 URL; n6CHTML5中文学习网 - HTML5先行者学习网
4.把这个 URL 置入使用; n6CHTML5中文学习网 - HTML5先行者学习网
5.*释放这个 URL 的伺服 n6CHTML5中文学习网 - HTML5先行者学习网
关键点: n6CHTML5中文学习网 - HTML5先行者学习网
1.对于同一个 file ,每次调用 URL.createObjectURL 的时候,都会重新生成一个不同的 URL; n6CHTML5中文学习网 - HTML5先行者学习网
2.调用 URL.createObjectURL 的时候,浏览器自动在内存中开辟空间,用于伺服这个 URL,也就是使得这个 URL 可以请求成功; n6CHTML5中文学习网 - HTML5先行者学习网
3.如果调用了 URL.revokeObjectURL(imgURL); 之后,这个伺服就会关掉,再请求这个 URL 就会 404; n6CHTML5中文学习网 - HTML5先行者学习网
4.这一切都是客户端的事情,服务器端对此一无所知,包括你选择的这个图; n6CHTML5中文学习网 - HTML5先行者学习网
5.这个 imgURL 大概是这个样子:blob:http%3A//localhost%3A8000/22cc97d5-5e46-4d87-9df4-c3e8c0aa72bb n6CHTML5中文学习网 - HTML5先行者学习网
n6CHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助