zoukankan      html  css  js  c++  java
  • JavaScript实现多张图片上传功能

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

    页面主要代码:

     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的画布也行,不过貌似用画布页面加载比直接预览图较快。

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

      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

  • 相关阅读:
    实现自己的Linq to Sql
    [分享] 浅谈项目需求变更管理
    【分享】老程序员的经验和价值在哪里?
    程序员是自己心中的“上帝”
    [分享]解析“程序员的十大技术烦恼”
    【分享】帮助你早些明白一些道理
    “风雨20年”的20条精辟编程经验
    【分享】 优秀程序员的代码是“活的”
    给开发人员培训时的语录
    【分享】SQL Server优化50法
  • 原文地址:https://www.cnblogs.com/wbxk/p/6891046.html
Copyright © 2011-2022 走看看