HTML5实现预览本地图片
来源: 阅读:1064 次 日期:2016-07-09 09:49:01
温馨提示: 小编为您整理了“HTML5实现预览本地图片”,方便广大网友查阅!

这篇文章主要介绍了HTML5实现预览本地图片 的相关资料,需要的朋友可以参考下

问题描述

假设我们在 HTML 里面有一个图片上传控件:

代码如下:

<input id="upload_image" type="file" name="image" accept="image/*" />

注意这个 accept="image/*" 非常重要,它指定了上传的是图片,在移动端的时候会关联到系统的弹窗选择类型等问题,务必加上。

然后,问题是,我们在没有提交这个表单到服务器之前,有没有办法把图片的内容读取出来呢?

看似简单,都是客户端的文件,应该是可以的,但在之前确实没什么好办法,但是自从有了HTML5,这个功能又回来了,通过FileReader可以轻松的实现这个功能。

例子说明问题

代码如下:

$(function() {

$('#upload_image').change(function(event) {

// 根据这个 <input> 获取文件的 HTML5 js 对象

var files = event.target.files, file;

if (files && files.length > 0) {

// 获取目前上传的文件

file = files[0];

// 来在控制台看看到底这个对象是什么

console.log(file);

// 那么我们可以做一下诸如文件大小校验的动作

if(file.size > 1024 * 1024 * 2) {

alert('图片大小不能超过 2MB!');

return false;

}

// !!!!!!

// 下面是关键的关键,通过这个 file 对象生成一个可用的图像 URL

// 获取 window 的 URL 工具

var URL = window.URL || window.webkitURL;

// 通过 file 生成目标 url

var imgURL = URL.createObjectURL(file);

// 用这个 URL 产生一个 <img> 将其显示出来

$('body').append($('<img/>').attr('src', imgURL));

// 使用下面这句可以在内存中释放对此 url 的伺服,跑了之后那个 URL 就无效了

// URL.revokeObjectURL(imgURL);

}

});

});

简要说明

简单来说整个操作设计如下几步:

1.通过 <file> 的 change 事件触发事件,并且获取 event 对象;

2.通过 event 对象获取上传的文件的 js 对象 file ;

3.通过 window.URL 工具从 file 对象生成一个可用的 URL;

4.把这个 URL 置入使用;

5.*释放这个 URL 的伺服

关键点:

1.对于同一个 file ,每次调用 URL.createObjectURL 的时候,都会重新生成一个不同的 URL;

2.调用 URL.createObjectURL 的时候,浏览器自动在内存中开辟空间,用于伺服这个 URL,也就是使得这个 URL 可以请求成功;

3.如果调用了 URL.revokeObjectURL(imgURL); 之后,这个伺服就会关掉,再请求这个 URL 就会 404;

4.这一切都是客户端的事情,服务器端对此一无所知,包括你选择的这个图;

5.这个 imgURL 大概是这个样子:blob:http%3A//localhost%3A8000/22cc97d5-5e46-4d87-9df4-c3e8c0aa72bb

更多信息请查看网页制作
手机网站地址:HTML5实现预览本地图片
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map