博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于HTML5的多张图片上传
阅读量:6003 次
发布时间:2019-06-20

本文共 1948 字,大约阅读时间需要 6 分钟。

图片上传之前也有写过demo,不过是单张上传的,最近有个业务需求是需要多张上传的,于是乎从新改写了一下

HTML结构:

1
2
3
4
<div 
class
=
"container"
>
    
<label>请选择一个图像文件:</label>
    
<input type=
"file" 
id=
"file_input" 
multiple/>
</div>

顺便说下这个上传的主要逻辑:

·用input标签并选择type=file,记得带上multiple,不然就只能单选图片了

·绑定好input的change时间,

·重点就是如何处理这个change事件了,使用H5新的FileReader接口读取文件并打成base64编码,之后的事就是与后端同学交互着玩啦

JS代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
window.onload = 
function
(){
        
var 
input = document.getElementById(
"file_input"
);
        
var 
result,div;
 
        
if
(
typeof 
FileReader===
'undefined'
){
            
result.innerHTML = 
"抱歉,你的浏览器不支持 FileReader"
;
            
input.setAttribute(
'disabled'
,
'disabled'
);
        
}
else
{
            
input.addEventListener(
'change'
,readFile,
false
);
        
}<br>     
//handler
        
function 
readFile(){
            
for
(
var 
i=0;i<
this
.files.length;i++){
                
if 
(!input[
'value'
].match(/.jpg|.gif|.png|.bmp/i)){  
//判断上传文件格式
                    
return 
alert(
"上传的图片格式不正确,请重新选择"
)<br>          }
                
var 
reader = 
new 
FileReader();
                
reader.readAsDataURL(
this
.files[i]);
                
reader.onload = 
function
(e){
                    
result = 
'<div id="result"><img src="'
+
this
.result+
'" alt=""/></div>'
;
                    
div = document.createElement(
'div'
);
                    
div.innerHTML = result;
                    
document.getElementById(
'body'
).appendChild(div);    
//插入dom树                      <br>          }
            
}
        
}
    
}

上传多张图片难道就这样实现了吗0.0

然而并没有,这样只是将图片转换成base64编码后再前端显示,一刷新什么都没有

插入图片后,打开开发者工具看html结构是这样的

 

现实的做法是,我们在处理函数里将文件队列里的文件发送到后端,后端同学呢返回文件对应的MD5加密过文件和路径给前端,前端就拿着这个路径渲染到页面上。

之后再把MD5文件传回给后端,因为上传完后前端一般有删除图片的操作,回传目的就是告诉后端确认那些图片是我们想要的,后端存入数据库里。

说下用jquery如何交互吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function 
readFile(){
            
var 
fd = 
new 
FormData();
            
for
(
var 
i=0;i<
this
.files.length;i++){
                
var 
reader = 
new 
FileReader();
                
reader.readAsDataURL(
this
.files[i]);
                
fd.append(i,
this
.files[i]);<br>          }
                
$.ajax({
                    
url : 
''
,
                    
type : 
'post'
,
                    
data : fd,
                    
success : 
function
(data){
                        
console.log(data)
                  
 } 
                
})
}   

FormData也是H5的新接口,用来模拟表单控件的提交,最大的好处呢就是可以提交二进制文件

然后success的回调里面我们拿回了想要的数据后呢,就可以将图片插进去页面啦,类似之前的做法~

上个效果图:

 

转载于:https://www.cnblogs.com/momox/p/5250512.html

你可能感兴趣的文章
response.getWriter()的作用解决方法
查看>>
linux文件存取 inode解读
查看>>
android edittext不弹出软键盘
查看>>
windows下安装和配置nginx
查看>>
selinux
查看>>
第3章 远程连接管理Linux实践
查看>>
透析Linux系统编程
查看>>
数据库Sqlite文件的增删改查
查看>>
hdu 1024 Max Sum Plus Plus 小白都可以看得懂的解析
查看>>
shell中常见参数及判断命令
查看>>
VMware Horizon View 7.5 虚拟桌面实施咨询与购买--软件硬件解决方案
查看>>
2018新版驾照驾照psd模板下载
查看>>
【矢量图控件教程】矢量图控件VectorDraw 常见问题整理大全(一)
查看>>
文件系统、服务、防火墙、SELINUX——安全四大金刚
查看>>
RabbitMQ如何保证队列里的消息99.99%被消费?
查看>>
Lync Server 2010的部署系列_第五章 准备 Active Directory 域服务
查看>>
java基本数据类型及运算符小结
查看>>
第一周博客作业
查看>>
Python strip lstrip rstrip使用方法
查看>>
Linux开发工具_1_gcc入门(上)
查看>>