webuploader 實現圖片批量上傳

来源:http://www.cnblogs.com/HawkFalcon/archive/2017/11/30/7727028.html
-Advertisement-
Play Games

1、導入資源 2、JSP代碼 3、Js代碼 註意: 4、controller代碼 5、工具類 ...


1、導入資源

 

2、JSP代碼

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

 

3、Js代碼

  1 <script type="text/javascript">
  2     var  imagePath=null; 
  3     
  4         function article_save() {
  5             alert("刷新父級的時候會自動關閉彈層。");
  6             window.parent.location.reload();
  7         }
  8 
  9         /*項目發票-添加*/
 10         function article_add(title, url, w, h) {
 11         if(imagePath){
 12             var index = layer.open({
 13                 type : 2,
 14                 title : title,
 15                 content : url+imagePath
 16             });
 17             layer.full(index);
 18         }else{alert("沒有上傳圖片,請先上傳圖片");}
 19         }
 20         
 21         $(function() {
 22             $('.skin-minimal input').iCheck({
 23                 checkboxClass : 'icheckbox-blue',
 24                 radioClass : 'iradio-blue',
 25                 increaseArea : '20%'
 26             });
 27 
 28             $list = $("#fileList"), $btn = $("#btn-star"), state = "pending",
 29                     uploader;
 30 
 31             var uploader = WebUploader.create({
 32                 auto : true,
 33                 swf : 'lib/webuploader/0.1.5/Uploader.swf',// swf文件路徑
 34 
 35                 // 文件接收服務端。
 36                 server : 'lib/webuploader/0.1.5/server/fileupload.php', // 文件接收服務端。
 37 
 38                 // 選擇文件的按鈕。可選。
 39                 // 內部根據當前運行是創建,可能是input元素,也可能是flash.
 40                 pick : '#filePicker',
 41 
 42                 // 不壓縮image, 預設如果是jpeg,文件上傳前會壓縮一把再上傳!
 43                 resize : false,
 44                 // 只允許選擇圖片文件。
 45                 accept : {
 46                     title : 'Images',
 47                     extensions : 'gif,jpg,jpeg,bmp,png',
 48                     mimeTypes : 'image/*'
 49                 }
 50             });
 51             // 當有文件被添加進隊列的時候
 52             uploader
 53                     .on(
 54                             'fileQueued',
 55                             function(file) {
 56                                 var $li = $('<div id="' + file.id + '" class="item">'
 57                                         + '<div class="pic-box"><img></div>'
 58                                         + '<div class="info">'
 59                                         + file.name
 60                                         + '</div>'
 61                                         + '<p class="state">等待上傳...</p>'
 62                                         + '</div>'), $img = $li.find('img');
 63                                 $list.append($li);
 64 
 65                                 // 創建縮略圖
 66                                 // 如果為非圖片文件,可以不用調用此方法。
 67                                 // thumbnailWidth x thumbnailHeight 為 100 x 100
 68                                 uploader.makeThumb(file, function(error, src) {
 69                                     if (error) {
 70                                         $img.replaceWith('<span>不能預覽</span>');
 71                                         return;
 72                                     }
 73 
 74                                     $img.attr('src', src);
 75                                 }, thumbnailWidth, thumbnailHeight);
 76                             });
 77             // 文件上傳過程中創建進度條實時顯示。
 78             uploader
 79                     .on(
 80                             'uploadProgress',
 81                             function(file, percentage) {
 82                                 var $li = $('#' + file.id), $percent = $li
 83                                         .find('.progress-box .sr-only');
 84 
 85                                 // 避免重覆創建
 86                                 if (!$percent.length) {
 87                                     $percent = $(
 88                                             '<div class="progress-box"><span class="progress-bar radius"><span class="sr-only" style="width:0%"></span></span></div>')
 89                                             .appendTo($li).find('.sr-only');
 90                                 }
 91                                 $li.find(".state").text("上傳中");
 92                                 $percent.css('width', percentage * 100 + '%');
 93                             });
 94 
 95             // 文件上傳成功,給item添加成功class, 用樣式標記上傳成功。
 96             uploader.on('uploadSuccess', function(file) {
 97                 $('#' + file.id).addClass('upload-state-success')
 98                         .find(".state").text("已上傳");
 99             });
100 
101             // 文件上傳失敗,顯示上傳出錯。
102             uploader.on('uploadError', function(file) {
103                 $('#' + file.id).addClass('upload-state-error').find(".state")
104                         .text("上傳出錯");
105             });
106 
107             // 完成上傳完了,成功或者失敗,先刪除進度條。
108             uploader.on('uploadComplete', function(file) {
109                 $('#' + file.id).find('.progress-box').fadeOut();
110             });
111             uploader.on('all', function(type) {
112                 if (type === 'startUpload') {
113                     state = 'uploading';
114                 } else if (type === 'stopUpload') {
115                     state = 'paused';
116                 } else if (type === 'uploadFinished') {
117                     state = 'done';
118                 }
119 
120                 if (state === 'uploading') {
121                     $btn.text('暫停上傳');
122                 } else {
123                     $btn.text('開始上傳');
124                 }
125             });
126 
127             $btn.on('click', function() {
128                 if (state === 'uploading') {
129                     uploader.stop();
130                 } else {
131                     uploader.upload();
132                 }
133             });
134 
135         });
136 
137         (function($) {
138             // 當domReady的時候開始初始化
139             $(function() {
140                 var $wrap = $('.uploader-list-container'),
141 
142                 // 圖片容器
143                 $queue = $('<ul class="filelist"></ul>').appendTo(
144                         $wrap.find('.queueList')),
145 
146                 // 狀態欄,包括進度和控制按鈕
147                 $statusBar = $wrap.find('.statusBar'),
148 
149                 // 文件總體選擇信息。
150                 $info = $statusBar.find('.info'),
151 
152                 // 上傳按鈕
153                 $upload = $wrap.find('.uploadBtn'),
154 
155                 // 沒選擇文件之前的內容。
156                 $placeHolder = $wrap.find('.placeholder'),
157 
158                 $progress = $statusBar.find('.progress').hide(),
159 
160                 // 添加的文件數量
161                 fileCount = 0,
162 
163                 // 添加的文件總大小
164                 fileSize = 0,
165 
166                 // 優化retina, 在retina下這個值是2
167                 ratio = window.devicePixelRatio || 1,
168 
169                 // 縮略圖大小
170                 thumbnailWidth = 110 * ratio, thumbnailHeight = 110 * ratio,
171 
172                 // 可能有pedding, ready, uploading, confi

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [MY NOTE] Translate Source:http://www.dotnettricks.com/learn/webapi/difference-between-wcf-and-web-api-and-wcf-rest-and-web-service Web Service 1.基於SO ...
  • Audio Source:聲音組件。需要與 Audio Listener 配合使用,Main Camera 會預設有 Audio Lisetener。 Audio Clip:聲音片段。指定需要播放的音頻文件。 Play On Awake:游戲運行起來後就開始播放。 Mute:靜音。 Loop:是否循 ...
  • 原文:http://blog.sina.com.cn/s/blog_4e61c4290100ndyl.html 引言 隨著雙核、四核等多核處理器的推廣,多核處理器或超線程單核處理器的電腦已很常見,基於多核處理的編程技術也開始受到程式員們普遍關註。這其中一個重要的方面就是構建多線程應用程式(因為不使 ...
  • 在.net 的世界里,離不開委托和事件,其實理解透了後很簡單,總結了一下分為6步: 1)定義委托 public delegate void RevicedEventHandler(object sender,RevicedEventArgs e); RevicedEventArgs :自定義參數源, ...
  • 非同步socket不是一個新的概念,但是,對於普通開發人員來說很難掌握。 網上也有許多這方面的文章。大都比較零散。 因工作的需要,我編寫了此封裝庫。 本人認為較好的完成對非同步socket的封裝! 即不失性能,又非常易於使用。 此庫將socket處理分為幾個模塊,清晰明瞭。 有些模塊處理可能沒達到最佳狀... ...
  • 1.介面返回的流: 2.下載流文件的代碼 方法一:是用了插件 https://github.com/kennethjiang/js-file-download 方法二:是用了 blob 不管哪種方法,記得設置 responseType ...
  • <div> <ul class="nav nav-tabs"> <li class="active"><a href="#Index" aria-controls="Index" role="tab" data-toggle="tab">首頁</a></li> <li ><a href="#Inde ...
  • express的安裝 express創建新項目 創建完畢後,修改express的預設視圖引擎。 在views下刪掉對應的jade文件 加入index.html 在index.html中輸入 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...