基于HTML5的多张图片上传

拖了一个多星期了,正式开波,处女博~

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

HTML结构:

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

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

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

·绑定好input的change时间,

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

JS代码:

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);
        }     //handler
        function readFile(){
            for(var i=0;i<this.files.length;i++){
                if (!input[‘value‘].match(/.jpg|.gif|.png|.bmp/i)){  //判断上传文件格式
                    return alert("上传的图片格式不正确,请重新选择")          }
                var reader = new FileReader();
                reader.readAsDataURL(this.files[i]);
                reader.onload = function(e){
                    result = ‘<div id="result"><img src="‘+this.result+‘" /></div>‘;
                    div = document.createElement(‘div‘);
                    div.innerHTML = result;
                    document.getElementById(‘body‘).appendChild(div);    //插入dom树                                }
            }
        }
    }

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

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

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

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

说下用jquery如何交互吧

function readFile(){
            var fd = new FormData();
            for(var i=0;i<this.files.length;i++){
                if (!input[‘value‘].match(/.jpg|.gif|.png|.bmp/i)){
                    return alert("您上传的图片格式不正确,请重新选择")
                }
                var reader = new FileReader();
                reader.readAsDataURL(this.files[i]);
                fd.append(i,this.files[i]);
                $.ajax({
                    url : ‘‘,
                    type : ‘post‘,
                    data : fd,
                    success : function(data){
                        console.log(data)
                    }
                })
         }
}

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

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

上个效果图:

本人资历尚浅,难免出现纰漏,欢迎大家指正,如果觉得不错,那就顶一下谢谢啦

  

 

时间: 2025-01-31 00:29:21

基于HTML5的多张图片上传的相关文章

基于HTML5多图片Ajax上传可预览

html5多图控件<input id="fileImage" type="file" size="30" name="files[]" multiple /> multiple 这个input的特性是html5新有的,所以IE6这么低级的货是无法兼容的. 这个属性相当于以前的这样的多图情况 <input id="fileImage" type="file" size=&

基于AFNetworking的多张图片上传

// 1.创建请求管理对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.发送请求 NSMutableDictionary * paramters = [NSMutableDictionary dictionary]; paramters[@"uid"] = [self getUserID]; PKLog(@"paramters==%@",paramters); // 转换成N

多张图片上传简单示例

说是原创,其实也是参考了众多网上的贴子,非常感谢那些无私奉献的前辈们! 这个项目在要用到fileupload包及相关的io包(我上传到网上了,大家可以免费下载), 另外也可以用struts2包,为了省事我把整个struts2-core-2.3.24.1的包都导进项目里了,该包里面包含了上传用到的所有包. struts2包可以从官网上下载:http://struts.apache.org/download.cgi#struts23241 1.上传多个图片是要注意 第一:<form id="f

多张图片上传功能

今天闲着没事,把之前的多张图片上传代码整理了下. 页面主要代码: 1 <div class="upBox upBox2"> 2 <div class="d1"> 3 <a class="redA1 rightA" href="javascript:choosePhotos();" id="continue_add_button" style="display:none

Nodejs express、html5实现拖拽上传

Nodejs express.html5实现拖拽上传 一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.No

Nodejs express、html5实现拖拽上传(转载)

一.前言 文件上传是一 个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖 拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是 expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.NodeJs基础知识 nodejs简单来说就是一个可

SFTP基于Key多进程批量并发上传文件实现案例(python)

最近在研究Paramiko,Paramiko可以非常方便的实现基于SSH协议的远程连接,可以基于 口令,也可以无口令RSA非对称密钥,亦可以实现SFTP上传下载操作,安全高效,再结合多 进程或者是多线程就可以实现并行处理,写了一个简单的SFTP基于Key多进程批量并发上传 文件的实现案例,供以后参考. 安装加密模块和Paramiko模块 下载:pycrypto-2.6.1.tar.gz paramiko-1.10.1.tar.gz 安装: tar -zxf pycrypto-2.6.1.tar.

Struts2文件上传(基于表单的文件上传)

•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-FileUpload组件特点 –使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能 –能够全程控制上传内容 –能够对上传文件的大小.类型进行控制 •需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包): –http://jak

Servlet3.0学习总结——基于Servlet3.0的文件上传

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 <%@ page language="java&