多张图片上传功能

今天闲着没事,把之前的多张图片上传代码整理了下。

页面主要代码:

 1 <div class="upBox upBox2">
 2     <div class="d1">
 3         <a class="redA1 rightA" href="javascript:choosePhotos();" id="continue_add_button" style="display:none;">继续添加</a>
 4     </div>
 5     <div class="d2" id="add_photo_button">
 6         <a href="javascript:choosePhotos();" class="blueA1">从电脑上传照片</a>
 7         <p class="p1">注:支持JPG格式多张上传,按住Ctrl或Shift选择图片,一次最多可上传150张照片</p>
 8     </div>
 9     <input type="file" id="upload" accept="image/jpeg" multiple="multiple" style="display:none;" />
10     <canvas id="myCanvas" style="display:none;"></canvas>
11     <div class="d3">
12         <ul class="ul1 clearfix" id="local_upload_div">
13
14         </ul>
15     </div>
16 </div>

js部分主要代码,其实不用html5的画布也行,不过貌似用画布页面加载比直接预览图较快。

具体上传代码没写,和单张上传是一样的,需要的朋友可以去我的另一篇写单张上传的博客里看看:单张图片上传完整代码

  1 //准备上传的模板
  2 var mb_upload = "<li id=\"up_li_INDEX\">"+
  3                     "<div>"+
  4                         "<div class=\"imgD\">" +
  5                             "<img id=\"up_img_INDEX\" src=\"/img/upload/morenI.png\" >"+
  6                         "</div>" +
  7                         "<p class=\"jdP\" id=\"up_p_INDEX\">" +
  8                             "<img class=\"i1\" src=\"/img/upload/loading.gif\">"+
  9                             "准备上传"+
 10                         "</p>" +
 11                     "</div>"+
 12                 "</li>";
 13
 14 $(function(){
 15     //文件域改变时触发
 16     $(‘#upload‘).change(function (evt) {
 17           fileChange(evt);
 18     });
 19 });
 20
 21 //触发文件域
 22 function choosePhotos(){
 23     $("#upload").click();
 24 }
 25
 26 //文件域改变时触发
 27 function fileChange(evt){
 28     var files = evt.target.files;
 29     if(files.length == 0)return;
 30     //上传页面已有照片数量
 31     var up_page_num = $("#local_upload_div li").length;
 32
 33     $("#add_photo_button").hide();
 34     $("#continue_add_button").show();
 35
 36     layer.msg(‘照片加载中‘, {icon: 16});
 37
 38     for(var m=0; m<files.length; m++){
 39         var f = files[m];
 40         console.log("type="+f.type+" name="+f.name+" length="+f.size);
 41         addPhoto(m+1+up_page_num);
 42     }
 43     getImagesInfo(files,0,up_page_num);
 44
 45 }
 46
 47 //页面添加等待上传的预显示图片
 48 function addPhoto(i){
 49     var segment = mb_upload;
 50     segment = segment.replace(/INDEX/g,i);
 51     $("#local_upload_div").append(segment);
 52 }
 53
 54 //获取到照片信息并在页面添加预览图
 55 var getImagesInfo = function(files,a,up_page_num){
 56
 57     if(files.length > a){
 58
 59         usUploading = true;
 60
 61         var f = files[a];
 62
 63         ///var type = f.type;
 64         //获取容器
 65         var c = document.getElementById("myCanvas");
 66         //获取画布对象
 67         var cxt = c.getContext("2d");
 68
 69         var reader = new FileReader();
 70
 71         var name = f.name;//完整照片名称,带格式
 72
 73         //异步方法,文件读取完毕才执行
 74         reader.onload = function(e){
 75             //图片的读取结果
 76             var dataImg = e.target.result;
 77             var img = new Image();
 78             //异步方法
 79             img.onload = function(){
 80                 var ratio = img.width/img.height;
 81                 var h,w;
 82                 //等比例压缩宽和高
 83                 if(ratio>1){
 84                     w = 110;
 85                     h = w*img.height/img.width;
 86                 }else{
 87                     h = 110;
 88                     w = h*img.width/img.height;
 89                 }
 90                 //容器设置宽和高
 91                 c.width = w;
 92                 c.height = h;
 93                 //清空容器
 94                 cxt.clearRect(0, 0, w, h);
 95                 //开始作画
 96                 cxt.drawImage(img,0,0,w,h);
 97                 //获取容器中画的url
 98                 var compressed = c.toDataURL("image/jpeg");
 99
100                 //将预览图插入上传页面
101                 $("#up_img_"+(a+1+up_page_num)).attr("src",compressed);
102                 $("#up_img_"+(a+1+up_page_num)).show("slow");
103
104                 syncUpload(files,dataImg,a,name,up_page_num);
105             };
106             //将图片的读取结果赋到img对象的src属性上
107             img.src = dataImg;
108         };
109         //将图片读取为URL数据:base64编码
110         reader.readAsDataURL(f);
111     }
112 }
113
114 //原图上传
115 var syncUpload = function(files,imgStr,index,name,up_page_num){
116
117     sleep(1000);//延时1s,模拟ajax,O(∩_∩)O哈哈~
118
119     //这里就是和单张上传逻辑一样了,只不过在上传成功后再次调用上面的方法,具体上传的方法就不写了
120     $("#up_p_"+(index+1+up_page_num)).html("<img class=\"i1\" src=\"/img/upload/duihao2.png\">"+
121                                             "上传成功"+
122                                             "<a href=\"javascript:void(0);\" class=\"right\"><img class=\"i2\" src=\"/img/upload/shanI.gif\"></a>");
123
124     getImagesInfo(files,++index,up_page_num);
125
126 };
127
128 //设置延时函数
129 function sleep(numberMillis) {
130     var now = new Date();
131     var exitTime = now.getTime() + numberMillis;
132     while (true) {
133         now = new Date();
134         if (now.getTime() > exitTime)return;
135     }
136 }

看看基本效果O(∩_∩)O:

时间: 2024-12-29 11:17:31

多张图片上传功能的相关文章

(转)淘淘商城系列——实现图片上传功能

http://blog.csdn.net/yerenyuan_pku/article/details/72808000 上文我们使用FastDFS-Client进行了简单的文件上传操作测试,淘淘商城项目中添加商品时上传图片的功能还没实现,如下图所示.本文将花大量笔墨来教大家如何实现图片上传这个功能. 我们来看下item-add.jsp页面,可以看到上传图片触发的方法是通过叫做picFileUpload的class来处理的,在<a>标签的下方是一个隐藏域,是用来接收图片上传到图片服务器的回显地址

Node.js 博客实例(三)添加文件上传功能

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/文件夹下. blog/views/header.ejs  在<span><a title="发表" href=&quo

Node.js 博客实例(三)增加文件上传功能

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件目前有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/目录下. blog/views/header.ejs  在<span><a title="发表" href="

vue 图片上传功能

这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix">   <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'>   <img :src="item">   </li>   <li style="position:

nodejs-使用multer实现多张图片上传,express搭建脚手架

nodejs-使用multer实现多张图片上传,express搭建脚手架 在工作中,我们经常会看到用户有多张图片上传,并且预览展示的需求.那么在具体实现中又该怎么做呢? 本实例需要nodejs基础,本实例尽可能的在代码中实现了解读,如有疑惑点,欢迎提问.但是提问之前,希望你能先自行尝试解决,锻炼解决问题的能力. 首先使用express脚手架生成,并且安装依赖 express --ejsnpm i 在routes文件夹中建立/api/v1/img.js,在app.js中写入代码引入img.js,安

struts2中实现文件上传功能

在web项目中,文件上传.头像上传这样的功能经常是要用到的,下面就以在struts2中实现文件上传功能为例子,简单地理一下文件上传功能的编码思路. 项目目录结构 项目源代码 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:x

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

HTML 5 File API:文件拖放上传功能

即将到来的 html5 规范有几个特性,以致使 HTML 远远超出其本身作为一种标记语言的能力,并为 Web 开发者提供了一些强大的脚本工具.负责监督 HTML5 发展进程的 W3C 组织,刚刚出版了一份强有力的规格草案 – HTML5 File API 接口功能. 该 API 的设计初衷,是改善基于浏览器的 Web 应用程序处理文件上传的方式,使文件直接拖放上传成为可能.草案定义了新的输入选项 <input type=”file”> 来处理文件上传. 更为惊喜的是,该 API 为开发者提供了

nodejs 实现简单的文件上传功能

首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传功能,优点:浏览器兼容好. 3.通过xhr level2的异步请求,可以百度formData对象. 这里使用2做个练习. node插件请看下package.json文件 { "name": "upload", "version": "0.1