一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - webuploader 實現圖片批量上傳功能附實例代碼

webuploader 實現圖片批量上傳功能附實例代碼

2021-02-24 12:57Hawk喵 JAVA教程

這篇文章主要介紹了webuploader 實現圖片批量上傳功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

1、導入資源

webuploader 實現圖片批量上傳功能附實例代碼

 

webuploader 實現圖片批量上傳功能附實例代碼

2、jsp代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<div class="page-container">
    <div class="row cl">
      <label class="form-label col-xs-4 col-sm-2"><span
        class="c-red">*</span>項目名稱:</label>
      <div class="formcontrols col-xs-8 col-sm-9">
        <input type="text" class="input-text" value="${proname }"
          placeholder="" id="" name="proname" readonly="readonly">
      </div>
    </div>
    <div class="row cl">
      <label class="form-label col-xs-4 col-sm-2">縮略圖:</label>
      <div class="formcontrols col-xs-8 col-sm-9">
        <div class="uploader-thum-container">
          <div id="filelist" class="uploader-list"></div>
          <div id="filepicker">選擇圖片</div>
          <button id="btn-star"
            class="btn btn-default btn-uploadstar radius ml-10">開始上傳</button>
        </div>
      </div>
    </div>
    <div class="row cl">
      <label class="form-label col-xs-4 col-sm-2"><span
        class="c-red">*</span>項目發票上傳:</label>
      <div class="formcontrols col-xs-8 col-sm-9">
        <div class="uploader-list-container">
          <div class="queuelist">
            <div id="dndarea" class="placeholder">
              <div id="filepicker-2"></div>
              <p>或將照片拖到這里,單次最多可選300張</p>
            </div>
          </div>
          <div class="statusbar" style="display:none;">
            <div class="progress">
              <span class="text">0%</span> <span class="percentage"></span>
            </div>
            <div class="info"></div>
            <div class="btns">
              <div id="filepicker2"></div>
              <div class="uploadbtn">開始上傳</div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="row cl">
      <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
        <button
          onclick="article_add('','invoicevo/save?&projectid=${projectid}&invoicescan=','10001');"
          class="btn btn-primary radius" type="button">
          <i class="hui-iconfont"></i>   保存  
        </button>
      </div>
    </div>
  </div>

   3、js代碼

  1. <script type="text/javascript"
  2.   var imagepath=null
  3.     function article_save() { 
  4.       alert("刷新父級的時候會自動關閉彈層。"); 
  5.       window.parent.location.reload(); 
  6.     } 
  7.     /*項目發票-添加*/ 
  8.     function article_add(title, url, w, h) { 
  9.     if(imagepath){ 
  10.       var index = layer.open({ 
  11.         type : 2, 
  12.         title : title, 
  13.         content : url+imagepath 
  14.       }); 
  15.       layer.full(index); 
  16.     }else{alert("沒有上傳圖片,請先上傳圖片");} 
  17.     } 
  18.     $(function() { 
  19.       $('.skin-minimal input').icheck({ 
  20.         checkboxclass : 'icheckbox-blue'
  21.         radioclass : 'iradio-blue'
  22.         increasearea : '20%' 
  23.       }); 
  24.       $list = $("#filelist"), $btn = $("#btn-star"), state = "pending"
  25.           uploader; 
  26.       var uploader = webuploader.create({ 
  27.         auto : true
  28.         swf : 'lib/webuploader/0.1.5/uploader.swf',// swf文件路徑 
  29.         // 文件接收服務端。 
  30.         server : 'lib/webuploader/0.1.5/server/fileupload.php'// 文件接收服務端。 
  31.         // 選擇文件的按鈕。可選。 
  32.         // 內部根據當前運行是創建,可能是input元素,也可能是flash. 
  33.         pick : '#filepicker'
  34.         // 不壓縮image, 默認如果是jpeg,文件上傳前會壓縮一把再上傳! 
  35.         resize : false
  36.         // 只允許選擇圖片文件。 
  37.         accept : { 
  38.           title : 'images'
  39.           extensions : 'gif,jpg,jpeg,bmp,png'
  40.           mimetypes : 'image/*' 
  41.         } 
  42.       }); 
  43.       // 當有文件被添加進隊列的時候 
  44.       uploader 
  45.           .on( 
  46.               'filequeued'
  47.               function(file) { 
  48.                 var $li = $('<div id="' + file.id + '" class="item">' 
  49.                     + '<div class="pic-box"><img></div>' 
  50.                     + '<div class="info">' 
  51.                     + file.name 
  52.                     + '</div>' 
  53.                     + '<p class="state">等待上傳...</p>' 
  54.                     + '</div>'), $img = $li.find('img'); 
  55.                 $list.append($li); 
  56.                 // 創建縮略圖 
  57.                 // 如果為非圖片文件,可以不用調用此方法。 
  58.                 // thumbnailwidth x thumbnailheight 為 100 x 100 
  59.                 uploader.makethumb(file, function(error, src) { 
  60.                   if (error) { 
  61.                     $img.replacewith('<span>不能預覽</span>'); 
  62.                     return
  63.                   } 
  64.                   $img.attr('src', src); 
  65.                 }, thumbnailwidth, thumbnailheight); 
  66.               }); 
  67.       // 文件上傳過程中創建進度條實時顯示。 
  68.       uploader 
  69.           .on( 
  70.               'uploadprogress'
  71.               function(file, percentage) { 
  72.                 var $li = $('#' + file.id), $percent = $li 
  73.                     .find('.progress-box .sr-only'); 
  74.                 // 避免重復創建 
  75.                 if (!$percent.length) { 
  76.                   $percent = $( 
  77.                       '<div class="progress-box"><span class="progress-bar radius"><span class="sr-only" style="width:0%"></span></span></div>'
  78.                       .appendto($li).find('.sr-only'); 
  79.                 } 
  80.                 $li.find(".state").text("上傳中"); 
  81.                 $percent.css('width', percentage * 100 + '%'); 
  82.               }); 
  83.       // 文件上傳成功,給item添加成功class, 用樣式標記上傳成功。 
  84.       uploader.on('uploadsuccess'function(file) { 
  85.         $('#' + file.id).addclass('upload-state-success'
  86.             .find(".state").text("已上傳"); 
  87.       }); 
  88.       // 文件上傳失敗,顯示上傳出錯。 
  89.       uploader.on('uploaderror'function(file) { 
  90.         $('#' + file.id).addclass('upload-state-error').find(".state"
  91.             .text("上傳出錯"); 
  92.       }); 
  93.       // 完成上傳完了,成功或者失敗,先刪除進度條。 
  94.       uploader.on('uploadcomplete'function(file) { 
  95.         $('#' + file.id).find('.progress-box').fadeout(); 
  96.       }); 
  97.       uploader.on('all'function(type) { 
  98.         if (type === 'startupload') { 
  99.           state = 'uploading'
  100.         } else if (type === 'stopupload') { 
  101.           state = 'paused'
  102.         } else if (type === 'uploadfinished') { 
  103.           state = 'done'
  104.         } 
  105.         if (state === 'uploading') { 
  106.           $btn.text('暫停上傳'); 
  107.         } else { 
  108.           $btn.text('開始上傳'); 
  109.         } 
  110.       }); 
  111.       $btn.on('click'function() { 
  112.         if (state === 'uploading') { 
  113.           uploader.stop(); 
  114.         } else { 
  115.           uploader.upload(); 
  116.         } 
  117.       }); 
  118.     }); 
  119.     (function($) { 
  120.       // 當domready的時候開始初始化 
  121.       $(function() { 
  122.         var $wrap = $('.uploader-list-container'), 
  123.         // 圖片容器 
  124.         $queue = $('<ul class="filelist"></ul>').appendto( 
  125.             $wrap.find('.queuelist')), 
  126.         // 狀態欄,包括進度和控制按鈕 
  127.         $statusbar = $wrap.find('.statusbar'), 
  128.         // 文件總體選擇信息。 
  129.         $info = $statusbar.find('.info'), 
  130.         // 上傳按鈕 
  131.         $upload = $wrap.find('.uploadbtn'), 
  132.         // 沒選擇文件之前的內容。 
  133.         $placeholder = $wrap.find('.placeholder'), 
  134.         $progress = $statusbar.find('.progress').hide(), 
  135.         // 添加的文件數量 
  136.         filecount = 0, 
  137.         // 添加的文件總大小 
  138.         filesize = 0, 
  139.         // 優化retina, 在retina下這個值是2 
  140.         ratio = window.devicepixelratio || 1, 
  141.         // 縮略圖大小 
  142.         thumbnailwidth = 110 * ratio, thumbnailheight = 110 * ratio, 
  143.         // 可能有pedding, ready, uploading, confirm, done. 
  144.         state = 'pedding'
  145.         // 所有文件的進度信息,key為file id 
  146.         percentages = {}, 
  147.         // 判斷瀏覽器是否支持圖片的base64 
  148.         issupportbase64 = (function() { 
  149.           var data = new image(); 
  150.           var support = true
  151.           data.onload = data.onerror = function() { 
  152.             if (this.width != 1 || this.height != 1) { 
  153.               support = false
  154.             } 
  155.           } 
  156.           data.src = "data:image/gif;base64,r0lgodlhaqabaiaaaaaaap///ywaaaaaaqabaaacauwaow=="
  157.           return support; 
  158.         })(), 
  159.         // 檢測是否已經安裝flash,檢測flash的版本 
  160.         flashversion = (function() { 
  161.           var version; 
  162.           try { 
  163.             version = navigator.plugins['shockwave flash']; 
  164.             version = version.description; 
  165.           } catch (ex) { 
  166.             try { 
  167.               version = new activexobject( 
  168.                   'shockwaveflash.shockwaveflash'
  169.                   .getvariable('$version'); 
  170.             } catch (ex2) { 
  171.               version = '0.0'
  172.             } 
  173.           } 
  174.           version = version.match(/d+/g); 
  175.           return parsefloat(version[0] + '.' + version[1], 10); 
  176.         })(), 
  177.         supporttransition = (function() { 
  178.           var s = document.createelement('p').style, r = 'transition' in s 
  179.               || 'webkittransition' in s 
  180.               || 'moztransition' in s 
  181.               || 'mstransition' in s || 'otransition' in s; 
  182.           s = null
  183.           return r; 
  184.         })(), 
  185.         // webuploader實例 
  186.         uploader; 
  187.         if (!webuploader.uploader.support('flash'
  188.             && webuploader.browser.ie) { 
  189.           // flash 安裝了但是版本過低。 
  190.           if (flashversion) { 
  191.             (function(container) { 
  192.               window['expressinstallcallback'] = function(state) { 
  193.                 switch (state) { 
  194.                 case 'download.cancelled'
  195.                   alert('您取消了更新!'
  196.                   break
  197.                 case 'download.failed'
  198.                   alert('安裝失敗'
  199.                   break
  200.                 default
  201.                   alert('安裝已成功,請刷新!'); 
  202.                   break
  203.                 } 
  204.                 delete window['expressinstallcallback']; 
  205.               }; 
  206.               var swf = 'expressinstall.swf'
  207.               // insert flash object 
  208.               var html = '<object type="application/' 
  209.                   + 'x-shockwave-flash" data="' + swf + '" '
  210.               if (webuploader.browser.ie) { 
  211.                 html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
  212.               } 
  213.               html += 'width="100%" height="100%" style="outline:0">' 
  214.                   + '<param name="movie" value="' + swf + '" />' 
  215.                   + '<param name="wmode" value="transparent" />' 
  216.                   + '<param name="allowscriptaccess" value="always" />' 
  217.                   + '</object>'
  218.               container.html(html); 
  219.             })($wrap); 
  220.             // 壓根就沒有安轉。 
  221.           } else { 
  222.             $wrap 
  223.                 .html('<a href="http://www.adobe.com/go/getflashplayer" target="_blank" border="0"><img alt="get flash player" src="http://www.adobe.com/macromedia/style_guide/images/160x41_get_flash_player.jpg" /></a>'); 
  224.           } 
  225.           return
  226.         } else if (!webuploader.uploader.support()) { 
  227.           alert('web uploader 不支持您的瀏覽器!'); 
  228.           return
  229.         } 
  230.         // 實例化 
  231.         uploader = webuploader.create({ 
  232.           pick : { 
  233.             id : '#filepicker-2'
  234.             label : '點擊選擇圖片' 
  235.           }, 
  236.           formdata : { 
  237.             uid : 123 
  238.           }, 
  239.           dnd : '#dndarea'
  240.           paste : '#uploader'
  241.           swf : 'lib/webuploader/0.1.5/uploader.swf'
  242.           chunked : false
  243.           chunksize : 512 * 1024, 
  244.           server : 'invoicevo/news_uploder?&projectid=${projectid}'
  245.           // runtimeorder: 'flash', 
  246.           // accept: { 
  247.           //   title: 'images', 
  248.           //   extensions: 'gif,jpg,jpeg,bmp,png', 
  249.           //   mimetypes: 'image/*' 
  250.           // }, 
  251.           // 禁掉全局的拖拽功能。這樣不會出現圖片拖進頁面的時候,把圖片打開。 
  252.           disableglobaldnd : true
  253.           filenumlimit : 300, 
  254.           filesizelimit : 200 * 1024 * 1024, // 200 m 
  255.           filesinglesizelimit : 50 * 1024 * 1024 
  256.         // 50 m 
  257.         }); 
  258.         // 拖拽時不接受 js, txt 文件。 
  259.         uploader.on('dndaccept'function(items) { 
  260.           var denied = false, len = items.length, i = 0, 
  261.           // 修改js類型 
  262.           unallowed = 'text/plain;application/javascript '
  263.           for (; i < len; i++) { 
  264.             // 如果在列表里面 
  265.             if (~unallowed.indexof(items[i].type)) { 
  266.               denied = true
  267.               break
  268.             } 
  269.           } 
  270.           return !denied; 
  271.         }); 
  272.         uploader.on('dialogopen'function() { 
  273.           console.log('here'); 
  274.         }); 
  275.         // uploader.on('filesqueued', function() { 
  276.         //   uploader.sort(function( a, b ) { 
  277.         //     if ( a.name < b.name ) 
  278.         //      return -1; 
  279.         //     if ( a.name > b.name ) 
  280.         //      return 1; 
  281.         //     return 0; 
  282.         //   }); 
  283.         // }); 
  284.         // 添加“添加文件”的按鈕, 
  285. /*         uploader.addbutton({ 
  286.           id : '#filepicker2'
  287.           label : '繼續添加' 
  288.         }); */ 
  289.         uploader.on('ready'function() { 
  290.           window.uploader = uploader; 
  291.         }); 
  292.         // 當有文件添加進來時執行,負責view的創建 
  293.         function addfile(file) { 
  294.           var $li = $('<li id="' + file.id + '">' 
  295.               + '<p class="title">' + file.name + '</p>' 
  296.               + '<p class="imgwrap"></p>' 
  297.               + '<p class="progress"><span></span></p>' + '</li>'), 
  298.           $btns = $( 
  299.               '<div class="file-panel">' 
  300.                   + '<span class="cancel">刪除</span>' 
  301.                   + '<span class="rotateright">向右旋轉</span>' 
  302.                   + '<span class="rotateleft">向左旋轉</span></div>'
  303.               .appendto($li), $prgress = $li 
  304.               .find('p.progress span'), $wrap = $li 
  305.               .find('p.imgwrap'), $info = $('<p class="error"></p>'), 
  306.           showerror = function(code) { 
  307.             switch (code) { 
  308.             case 'exceed_size'
  309.               text = '文件大小超出'
  310.               break
  311.             case 'interrupt'
  312.               text = '上傳暫停'
  313.               break
  314.             default
  315.               text = '上傳失敗,請重試'
  316.               break
  317.             } 
  318.             $info.text(text).appendto($li); 
  319.           }; 
  320.           if (file.getstatus() === 'invalid') { 
  321.             showerror(file.statustext); 
  322.           } else { 
  323.             // @todo lazyload 
  324.             $wrap.text('預覽中'); 
  325.             uploader 
  326.                 .makethumb( 
  327.                     file, 
  328.                     function(error, src) { 
  329.                       var img; 
  330.                       if (error) { 
  331.                         $wrap.text('不能預覽'); 
  332.                         return
  333.                       } 
  334.                       if (issupportbase64) { 
  335.                         img = $('<img src="'+src+'">'); 
  336.                         $wrap.empty().append(img); 
  337.                       } else { 
  338.                         $ 
  339.                             .ajax( 
  340.                                 'lib/webuploader/0.1.5/server/preview.php'
  341.                                 { 
  342.                                   method : 'post'
  343.                                   data : src, 
  344.                                   datatype : 'json' 
  345.                                 }) 
  346.                             .done( 
  347.                                 function
  348.                                     response) { 
  349.                                   if (response.result) { 
  350.                                     img = $('<img src="'+response.result+'">'); 
  351.                                     $wrap 
  352.                                         .empty() 
  353.                                         .append( 
  354.                                             img); 
  355.                                   } else { 
  356.                                     $wrap 
  357.                                         .text("預覽出錯"); 
  358.                                   } 
  359.                                 }); 
  360.                       } 
  361.                     }, thumbnailwidth, thumbnailheight); 
  362.             percentages[file.id] = [ file.size, 0 ]; 
  363.             file.rotation = 0; 
  364.           } 
  365.           file.on('statuschange'function(cur, prev) { 
  366.             if (prev === 'progress') { 
  367.               $prgress.hide().width(0); 
  368.             } else if (prev === 'queued') { 
  369.               $li.off('mouseenter mouseleave'); 
  370.               $btns.remove(); 
  371.             } 
  372.             // 成功 
  373.             if (cur === 'error' || cur === 'invalid') { 
  374.               console.log(file.statustext); 
  375.               showerror(file.statustext); 
  376.               percentages[file.id][1] = 1; 
  377.             } else if (cur === 'interrupt') { 
  378.               showerror('interrupt'); 
  379.             } else if (cur === 'queued') { 
  380.               percentages[file.id][1] = 0; 
  381.             } else if (cur === 'progress') { 
  382.               $info.remove(); 
  383.               $prgress.css('display''block'); 
  384.             } else if (cur === 'complete') { 
  385.               $li.append('<span class="success"></span>'); 
  386.             } 
  387.             $li.removeclass('state-' + prev).addclass( 
  388.                 'state-' + cur); 
  389.           }); 
  390.           $li.on('mouseenter'function() { 
  391.             $btns.stop().animate({ 
  392.               height : 30 
  393.             }); 
  394.           }); 
  395.           $li.on('mouseleave'function() { 
  396.             $btns.stop().animate({ 
  397.               height : 0 
  398.             }); 
  399.           }); 
  400.           $btns 
  401.               .on( 
  402.                   'click'
  403.                   'span'
  404.                   function() { 
  405.                     var index = $(this).index(), deg; 
  406.                     switch (index) { 
  407.                     case 0: 
  408.                       uploader.removefile(file); 
  409.                       return
  410.                     case 1: 
  411.                       file.rotation += 90; 
  412.                       break
  413.                     case 2: 
  414.                       file.rotation -= 90; 
  415.                       break
  416.                     } 
  417.                     if (supporttransition) { 
  418.                       deg = 'rotate(' + file.rotation 
  419.                           + 'deg)'
  420.                       $wrap.css({ 
  421.                         '-webkit-transform' : deg, 
  422.                         '-mos-transform' : deg, 
  423.                         '-o-transform' : deg, 
  424.                         'transform' : deg 
  425.                       }); 
  426.                     } else { 
  427.                       $wrap 
  428.                           .css( 
  429.                               'filter'
  430.                               'progid:dximagetransform.microsoft.basicimage(rotation=' 
  431.                                   + (~~((file.rotation / 90) % 4 + 4) % 4) 
  432.                                   + ')'); 
  433.                     } 
  434.                   }); 
  435.           $li.appendto($queue); 
  436.         } 
  437.         // 負責view的銷毀 
  438.         function removefile(file) { 
  439.           var $li = $('#' + file.id); 
  440.           delete percentages[file.id]; 
  441.           updatetotalprogress(); 
  442.           $li.off().find('.file-panel').off().end().remove(); 
  443.         } 
  444.         function updatetotalprogress() { 
  445.           var loaded = 0, total = 0, spans = $progress.children(), percent; 
  446.           $.each(percentages, function(k, v) { 
  447.             total += v[0]; 
  448.             loaded += v[0] * v[1]; 
  449.           }); 
  450.           percent = total ? loaded / total : 0; 
  451.           spans.eq(0).text(math.round(percent * 100) + '%'); 
  452.           spans.eq(1).css('width', math.round(percent * 100) + '%'); 
  453.           updatestatus(); 
  454.         } 
  455.         function updatestatus() { 
  456.           var text = '', stats; 
  457.           if (state === 'ready') { 
  458.             text = '選中' + filecount + '張圖片,共' 
  459.                 + webuploader.formatsize(filesize) + '。'
  460.           } else if (state === 'confirm') { 
  461.             stats = uploader.getstats(); 
  462.             if (stats.uploadfailnum) { 
  463.               text = '已成功上傳' 
  464.                   + stats.successnum 
  465.                   + '張照片至xx相冊,' 
  466.                   + stats.uploadfailnum 
  467.                   + '張照片上傳失敗,<a class="retry" href="#" rel="external nofollow" rel="external nofollow" >重新上傳</a>失敗圖片或<a class="ignore" href="#" rel="external nofollow" rel="external nofollow" >忽略</a>' 
  468.             } 
  469.           } else { 
  470.             stats = uploader.getstats(); 
  471.             text = '共' + filecount + '張(' 
  472.                 + webuploader.formatsize(filesize) + '),已上傳' 
  473.                 + stats.successnum + '張'
  474.             if (stats.uploadfailnum) { 
  475.               text += ',失敗' + stats.uploadfailnum + '張'
  476.             } 
  477.           } 
  478.           $info.html(text); 
  479.         } 
  480.         function setstate(val) { 
  481.           var file, stats; 
  482.           if (val === state) { 
  483.             return
  484.           } 
  485.           $upload.removeclass('state-' + state); 
  486.           $upload.addclass('state-' + val); 
  487.           state = val; 
  488.           switch (state) { 
  489.           case 'pedding'
  490.             $placeholder.removeclass('element-invisible'); 
  491.             $queue.hide(); 
  492.             $statusbar.addclass('element-invisible'); 
  493.             uploader.refresh(); 
  494.             break
  495.           case 'ready'
  496.             $placeholder.addclass('element-invisible'); 
  497.             $('#filepicker2').removeclass('element-invisible'); 
  498.             $queue.show(); 
  499.             $statusbar.removeclass('element-invisible'); 
  500.             uploader.refresh(); 
  501.             break
  502.           case 'uploading'
  503.             $('#filepicker2').addclass('element-invisible'); 
  504.             $progress.show(); 
  505.             $upload.text('暫停上傳'); 
  506.             break
  507.           case 'paused'
  508.             $progress.show(); 
  509.             $upload.text('繼續上傳'); 
  510.             break
  511.           case 'confirm'
  512.             $progress.hide(); 
  513.             $('#filepicker2').removeclass('element-invisible'); 
  514.             $upload.text('開始上傳'); 
  515.             stats = uploader.getstats(); 
  516.             if (stats.successnum && !stats.uploadfailnum) { 
  517.               setstate('finish'); 
  518.               return
  519.             } 
  520.             break
  521.           case 'finish'
  522.             stats = uploader.getstats(); 
  523.             if (stats.successnum) { 
  524.               alert('上傳成功'); 
  525.             } else { 
  526.               // 沒有成功的圖片,重設 
  527.               state = 'done'
  528.               location.reload(); 
  529.             } 
  530.             break
  531.           } 
  532.           updatestatus(); 
  533.         } 
  534.         uploader.onuploadprogress = function(file, percentage) { 
  535.           var $li = $('#' + file.id), $percent = $li 
  536.               .find('.progress span'); 
  537.           $percent.css('width', percentage * 100 + '%'); 
  538.           percentages[file.id][1] = percentage; 
  539.           updatetotalprogress(); 
  540.         }; 
  541.         uploader.onfilequeued = function(file) { 
  542.           filecount++; 
  543.           filesize += file.size; 
  544.           if (filecount === 1) { 
  545.             $placeholder.addclass('element-invisible'); 
  546.             $statusbar.show(); 
  547.           } 
  548.           addfile(file); 
  549.           setstate('ready'); 
  550.           updatetotalprogress(); 
  551.         }; 
  552.         uploader.onfiledequeued = function(file) { 
  553.           filecount--; 
  554.           filesize -= file.size; 
  555.           if (!filecount) { 
  556.             setstate('pedding'); 
  557.           } 
  558.           removefile(file); 
  559.           updatetotalprogress(); 
  560.         }; 
  561.         /*獲取服務器返回的數據*/ 
  562.         uploader.on('uploadsuccess'function(file, response) { 
  563.           alert(response.status); 
  564.           if (response.status == "success") { 
  565.             imagepath =response.filepath; 
  566.             alert("文件保存路徑:" + response.filepath); 
  567.           } else if (response.status == "error"
  568.             alert(response.error); 
  569.         }); 
  570.         uploader.on('all'function(type) { 
  571.           var stats; 
  572.           //alert(type); 
  573.           switch (type) { 
  574.           case 'uploadfinished'
  575.             setstate('confirm'); 
  576.             break
  577.           case 'startupload'
  578.             setstate('uploading'); 
  579.             break
  580.           case 'stopupload'
  581.             setstate('paused'); 
  582.             break
  583.           } 
  584.         }); 
  585.         uploader.onerror = function(code) { 
  586.           alert('eroor: ' + code); 
  587.         }; 
  588.         $upload.on('click'function() { 
  589.           if ($(this).hasclass('disabled')) { 
  590.             return false
  591.           } 
  592.           if (state === 'ready') { //點擊上傳按鈕,進入準備狀態。 
  593.             uploader.upload(); //開始上傳 
  594.           } else if (state === 'paused') { 
  595.             uploader.upload(); 
  596.           } else if (state === 'uploading') { 
  597.             uploader.stop(); 
  598.           } 
  599.         }); 
  600.         $info.on('click''.retry'function() { 
  601.           uploader.retry(); 
  602.         }); 
  603.         $info.on('click''.ignore'function() { 
  604.           alert('todo'); 
  605.         }); 
  606.         $upload.addclass('state-' + state); 
  607.         updatetotalprogress(); 
  608.       }); 
  609.     })(jquery); 
  610.   </script> 

     注意:

webuploader 實現圖片批量上傳功能附實例代碼

webuploader 實現圖片批量上傳功能附實例代碼

webuploader 實現圖片批量上傳功能附實例代碼

4、controller代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/**
   * 跳轉到上傳發票的頁面
   * @param proname
   * @param map
   * @return
   */
  @requestmapping(value = "/upload" )
  public string invoiceupload(string proname,long id,map<string, object> map){
    map.put("proname", proname);
    projectservice.getproject(id);
    map.put("projectid", id);
    return "project/invoiceupload";
  }
  /**
   * 上傳發票并保存導數據庫
   * @param file
   * @param request
   * @param response
   * @return
   */
  @responsebody
  @requestmapping(value = "/news_uploder", method ={requestmethod.post,requestmethod.get}, produces = "application/json; charset=utf-8")  
  public jsonobject uploder(@requestparam multipartfile[] file,long projectid,httpservletrequest request,httpservletresponse response){
    string flag=null;
    jsonobject jsonobject = new jsonobject();
    try {
      webuploaderutil webuploaderutil=new webuploaderutil();
      webuploaderutil.upload(file[0], "upload/invoice/", request);
      flag=webuploaderutil.getfilename();
      jsonobject.put("filepath", flag);
      jsonobject.put("status", "success");
    } catch (exception e) {
      e.printstacktrace();
    }  
    return jsonobject;
  }
  5、工具類
  package com.softjx.util;
/**
 *project name: qdlimap
 *file name:  webuploaderutil.java
 *package name: com.ltmap.platform.cms.util
 *date:     2017年4月13日 下午6:30:45
 *copyright (c) 2017,[email protected] all rights reserved.
*/
import java.io.file;
import java.text.simpledateformat;
import java.util.date;
import javax.servlet.http.httpservletrequest;
import org.springframework.web.multipart.multipartfile;
/**
 *title:   webuploaderutil<br/>
 *description:
 *@company:  勵圖高科<br/>
 *@author:  劉云生
 *@version:  v1.0
 *@since:   jdk 1.8.0_40
 *@date:   2017年4月13日 下午6:30:45 <br/>
*/
public class webuploaderutil {
  private string allowsuffix = "jpg,png,gif,jpeg";//允許文件格式
  private long allowsize = 2l;//允許文件大小
  private string filename;
  private string[] filenames;
  public string getallowsuffix() {
    return allowsuffix;
  }
  public void setallowsuffix(string allowsuffix) {
    this.allowsuffix = allowsuffix;
  }
  public long getallowsize() {
    return allowsize*1024*1024;
  }
  public void setallowsize(long allowsize) {
    this.allowsize = allowsize;
  }
  public string getfilename() {
    return filename;
  }
  public void setfilename(string filename) {
    this.filename = filename;
  }
  public string[] getfilenames() {
    return filenames;
  }
  public void setfilenames(string[] filenames) {
    this.filenames = filenames;
  }
  /**
   
   * @title:    getfilenamenew 
   * @description: todo 
   * @param:    @return
   * @return:   string
   * @author:   劉云生
   * @date:    2017年4月14日 上午10:17:35  
   * @throws
   */
  private string getfilenamenew(){
    simpledateformat fmt = new simpledateformat("yyyymmddhhmmsssss");
    return fmt.format(new date());
  }
  /**
   
   * @title:    uploads 
   * @description: todo 
   * @param:    @param files
   * @param:    @param destdir
   * @param:    @param request
   * @param:    @throws exception
   * @return:   void
   * @author:   劉云生
   * @date:    2017年4月14日 上午10:17:14  
   * @throws
   */
  public void uploads(multipartfile[] files, string destdir,httpservletrequest request) throws exception {
    string path = request.getcontextpath();
    string basepath = request.getscheme()+"://"+request.getservername()+":"+request.getserverport()+path;
    try {
      filenames = new string[files.length];
      int index = 0;
      for (multipartfile file : files) {
        string suffix = file.getoriginalfilename().substring(file.getoriginalfilename().lastindexof(".")+1);
        int length = getallowsuffix().indexof(suffix);
        if(length == -1){
          throw new exception("請上傳允許格式的文件");
        }
        if(file.getsize() > getallowsize()){
          throw new exception("您上傳的文件大小已經超出范圍");
        }
        string realpath = request.getsession().getservletcontext().getrealpath("/");
        file destfile = new file(realpath+destdir);
        if(!destfile.exists()){
          destfile.mkdirs();
        }
        string filenamenew = getfilenamenew()+"."+suffix;//
        file f = new file(destfile.getabsolutefile()+"\"+filenamenew);
        file.transferto(f);
        f.createnewfile();
        filenames[index++] =basepath+destdir+filenamenew;
      }
    } catch (exception e) {
      throw e;
    }
  }
  /**
   
   * @title:    upload 
   * @description: todo 
   * @param:    @param file
   * @param:    @param destdir
   * @param:    @param request
   * @param:    @throws exception
   * @return:   void
   * @author:   劉云生
   * @date:    2017年4月14日 上午10:16:16  
   * @throws
   */
  public void upload(multipartfile file, string destdir,httpservletrequest request) throws exception {
    string path = request.getcontextpath();
    //http://localhost:8088/huahang
    string basepath = request.getscheme()+"://"+request.getservername()+":"+request.getserverport()+path;
    try {
        string suffix = file.getoriginalfilename().substring(file.getoriginalfilename().lastindexof(".")+1);
        int length = getallowsuffix().indexof(suffix);
        if(length == -1){
          throw new exception("請上傳允許格式的文件");
        }
        if(file.getsize() > getallowsize()){
          throw new exception("您上傳的文件大小已經超出范圍");
        }
        string realpath = request.getsession().getservletcontext().getrealpath("/")+"/";
        file destfile = new file(realpath+destdir);
        if(!destfile.exists()){
          destfile.mkdirs();
        }
        string filenamenew = getfilenamenew()+"."+suffix;
        file f = new file(destfile.getabsolutefile()+"/"+filenamenew);
        file.transferto(f);
        f.createnewfile();
        //包含網站的全路徑http://localhost:8080/qdlimap/upload/user/20170414104142667.png
        //filename = basepath+destdir+filenamenew;
        //返回相對路徑upload/user/20170414104142667.png
        filename = destdir+filenamenew;
    } catch (exception e) {
      throw e;
  }
}
}

總結

以上所述是小編給大家介紹的webuploader 實現圖片批量上傳功能附實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/HawkFalcon/archive/2017/11/30/7727028.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性做久久久久免费观看 | 日韩精品一二三区 | 3d蒂法精品啪啪一区二区免费 | 摸咪网在线影院在线观看 | 日韩精品成人 | 魔法满屋免费观看完整版中文 | 无人区在线观看免费国语完整版 | 99国产精品久久久久久久... | 欧美理论片手机在线观看片免费 | igao网果冻传媒 | 色婷婷六月天 | 亚洲精品成人 | 亚洲 欧美 国产 日韩 字幕 | 美女被上漫画 | 日韩成人小视频 | 日本色午夜 | 3d欧美人与禽交 | 精品久久久噜噜噜久久7 | 91中文在线 | 亚洲第一综合天堂另类专 | 鬼惨笑小说 | 3d动漫美女物被遭强视频 | 亚洲七七久久综合桃花 | 国产亚洲精品精品国产亚洲综合 | 涩涩屋视频在线观看 | 99精品国产成人一区二区在线 | 1769在线视频 | 午夜影院费试看黄 | 精品亚洲一区二区三区在线播放 | 成年人在线视频观看 | 国产亚洲女人久久久久久 | 波多野结衣黑人系列在线观看 | 日韩在线免费看 | 天天综合天天综合 | 久久综合网久久综合 | 男女男精品视频网站 | 亚洲AV福利天堂一区二区三 | 免费看黄色片网站 | 亚洲国产货青视觉盛宴 | 国产伦久视频免费观看视频 | 青青青视频免费观看 |