我們來看一個比較全的 Plupload Demo
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Plupload使用指南</title>
- <!-- 首先需要引入plupload的源代碼 -->
- <script src="js/plupload.full.min.js"></script>
- </head>
- <body>
- <!-- 這裡我們隻使用最基本的html結構:一個選擇檔案的按鈕,一個開始上傳檔案的按鈕(甚至該按鈕也可以不要) -->
- <p>
- <button id="browse">選擇檔案</button>
- <button id="start_upload">開始上傳</button>
- </p>
- <script>
-
- //執行個體化一個plupload上傳對象
- var uploader = new plupload.Uploader({
- browse_button : 'browse', //觸發檔案選擇對話框的按鈕,為那個元素id
- url : 'images/upload.shtml', //伺服器端的上傳頁面位址
- flash_swf_url : 'js/Moxie.swf', //swf檔案,當需要使用swf方式進行上傳時需要配置該參數
- max_file_size: '2mb',//限制為2MB
filters: [{title: "Image files",extensions: "jpg,gif,png"}]//圖檔限制
- silverlight_xap_url : 'js/Moxie.xap' //silverlight檔案,當需要使用silverlight方式進行上傳時需要配置該參數
- });
-
- //在執行個體對象上調用init()方法進行初始化
- uploader.init();
-
- //圖檔選擇完畢觸發
- uploader.bind('FilesAdded',function(uploader,files){
-
- });
- //圖檔上傳成功觸發,ps:data是傳回值(第三個參數是傳回值)
- uploader.bind('FileUploaded',function(uploader,files,data){
- });
- //會在檔案上傳過程中不斷觸發,可以用此事件來顯示上傳進度監聽(比如說上傳進度)
- uploader.bind('UploadProgress',function(uploader,file){
-
- });
- //還有N多呢.....,具體參考連結==>http://www.sojson.com/jc_plupload.html 的各種事件說明。
-
- //最後給"開始上傳"按鈕注冊事件
- document.getElementById('start_upload').onclick = function(){
- uploader.start(); //調用執行個體對象的start()方法開始上傳檔案,當然你也可以在其他地方調用該方法
- }
-
- </script>
- </body>
- </html>
這個代碼是從其他地方
copy
過來,我做了些許改動。
這裡要說清楚的是,要掌握 Plupload 上傳,得掌握它的各種事件,事件詳細參考請見http://www.sojson.com/jc_plupload.html 的各種事件說明。
着重講到的是這個事件,成功後背景的傳回值,以及 Plupload 的狀态、head資訊。在其他部落格中很少有這個講解。
- //圖檔上傳成功觸發,ps:data是傳回值(第三個參數是傳回值)
- uploader.bind('FileUploaded',function(uploader,files,data){
- /**
- uploader:目前執行個體的對象,
- files:被上傳的檔案
- data:傳回值
- */
- });
參數沒有額定的
name
,隻有位置。第三個參數是背景傳回值。
好了,說到這裡了,一般的使用沒問題了,有問題參考請見http://www.sojson.com/jc_plupload.html 對Plupload的介紹。
Plupload多執行個體上傳
我們經常有需求,一個頁面有多個圖檔上傳的地方。
需求1:比如餐廳添加員工,需要上傳身份證,頭像,健康證等等,那就有3個地方。而我們要對
3
個圖檔上傳一一對應上傳,這時候是寫3遍是肯定可以解決的。
需求2:前提和需求1一樣,但是上傳的觸發方式有多種,比如點選圖檔位置可以上傳,點選圖檔的“上傳按鈕”也可以觸發,如下圖。
點選身份證圖檔可以上傳,點選“點選上傳身份證正面”按鈕也可以上傳。
Plupload多執行個體上傳方案一。
有的同學知道 Plupload 有一個設定,可以設定為數組。下面代碼的
browse_button
字段可以為數組,即為多個
id
- var uploader = new plupload.Uploader({
- //觸發上傳選擇圖檔事件
- browse_button : ["cardzmbtn","cardbmbtn","cardzmbtn-img","cardbmbtn-img"],
- url : _upload ,//伺服器端的上傳頁面位址
- max_file_size: '2mb',//限制為2MB
- filters: [{title: "Image files",extensions: "jpg,gif,png"}]//圖檔限制
- });
這裡有一個缺陷就是,如果對對應的上傳圖檔按鈕處理不同的回調事件,可能就有點力不從心,我也
console.log(uploader)
對象仔細看,沒有觸發上傳的
id
元素存儲,要是有就解決了。
Plupload多執行個體上傳方案二。
我目前就是選用的這種方案,原因是我要對不同的事件做不同的處理,比如上面上傳身份證的案例,我需要上傳正面和反面,上傳成功夠把上傳的圖檔指派到對應的位置。看下代碼:
Javascript 代碼:
- //觸發的id
- var ids = new Array("cardzmbtn","cardbmbtn","cardzmbtn-img","cardbmbtn-img");
-
- $.each(ids,function(i,n){
- var self = this.toString();
- //執行個體化一個plupload上傳對象
- var uploader = new plupload.Uploader({
- browse_button : self, //觸發檔案選擇對話框的按鈕,為那個元素id
- url : _upload ,//伺服器端的上傳頁面位址
- max_file_size: '2mb',//限制為2MB
- filters: [{title: "Image files",extensions: "jpg,gif,png"}]//圖檔限制
- });
- //在執行個體對象上調用init()方法進行初始化
- uploader.init();
- //綁定各種事件,并在事件監聽函數中做你想做的事
- uploader.bind('FilesAdded',function(uploader,files){
- uploader.start();
- });
- uploader.bind('FileUploaded',function(uploader,files,data){
- var imgUrl = "http://cdn.sojson.com/";
-
- //這裡得到圖檔的id
- var id = self.search("-img") == -1?self +"-img":self;
- console.log("現在在上傳的身份證是:",self.search('cardzmbtn')==0?'正':'反',"面");
- //成功判斷
- if(data.status == 200 ){
- data = $.parseJSON(data.response);
- var imagePath = imgUrl + data.file
- //圖檔指派
- document.getElementById(id).src = imagePath;
- //正面
- if(self.search('cardzmbtn')===0){
- $("#cardzmbtn-input").val(imagePath).attr('src-data',data.file);
- }else{//反面
- $("#cardbmbtn-input").val(imagePath).attr('src-data',data.file);
- }
- }
- });
- });
Html 代碼:
- <!--身份證上傳-->
- <div class="regCon mt15" id="step1" style="display: block">
- <div class="acctitle">身份證驗證</div><br>
- 請上傳有效期内的中華人民共和國二代身份證,<br>
- 請上傳小于2M且可以清晰的看到身份證上面的漢字及數字的圖檔。
- <div class="sfzdiv mt15 clearfix">
- <div class="sfzbox fl">
- <!--<span class="sfz-m-t">正面</span>-->
- <div class="sfz-img">
- <!--身份證上傳-->
- <!--身份證通過時-->
- <img src="pc_images/pcaccount/1.jpg" alt="" id="cardzmbtn-img" style="display: block;">
- <div class="cardzmbtn" id="cardzmbtn">點選上傳身份證正面</div>
- <div class="sfz-zk" style="display: none">
- <p class="f_12">身份證正面已上傳</p>
- <p class="f_10"><i class="sfz-right"></i>稽核已認證</p>
- <p class="txt-c"><span class="a_upagin">重新上傳</span></p>
- </div>
- </div>
- </div>
- <div class="sfzbox sfz-fm fr" >
- <!--<span class="sfz-m-t">背面</span>-->
- <div class="sfz-img">
- <!--身份證未通過時-->
- <img src="pc_images/pcaccount/2.jpg" alt="" id="cardbmbtn-img" style="display: block;">
- <div class="cardbmbtn" id="cardbmbtn">點選上傳身份證背面</div>
- <div class="sfz-zk" style="display: none">
- <p class="f_12">身份證背面已上傳</p>
- <p class="f_10"><i class="sfz-woring"></i>稽核未通過</p>
- <p class="txt-c"><span class="a_upagin">重新上傳</span></p>
- </div>
- </div>
- </div>
- <!-- 正面省份證 value:全位址,src-data:不帶域名的位址-->
- <input type="hidden" id="cardzmbtn-input">
- <!-- 反面省份證 value:全位址,src-data:不帶域名的位址 -->
- <input type="hidden" id="cardbmbtn-input">
- </div>
-
- <!--下邊框-->
- <div class="botton-border mt50">
- <a href="javascript:void (0);" id="nextStep02" class="a_blue mt15">下一步</a>
- </div>
- <div class="layer" ></div>
- </div>
上傳的時候選擇的是正面身份證上傳,結果會把上傳的圖檔顯示到正面的位置,并且把位址指派到
<input type="hidden" id="cardzmbtn-input">
的
value
中。反面則一樣顯示在反面的位置,image路徑指派到
<input type="hidden" id="cardbmbtn-input">
中。有沒有上傳正反面身份證業務判斷就用它來判斷即可。
版權所屬:SO JSON線上解析
原文位址:http://www.sojson.com/blog/214.html
轉載時必須以連結形式注明原始出處及本聲明
Plupload上傳插件中文幫助文檔
http://www.sojson.com/jc_plupload.html