百度上傳插件 WebUploader初始使用

引入資源

使用Web Uploader文件上傳須要引入三種資源:JS, CSS, SWF。javascript

  
  1. <!--引入CSS-->
  2. <link rel= "stylesheet" type= "text/css" href= "webuploader文件夾/webuploader.css" >
  3. <!--引入JS-->
  4. <script type= "text/javascript" src= "webuploader文件夾/webuploader.js" ></script>
  5. <!--SWF在初始化的時候指定,在後面將展現-->

文件上傳

WebUploader只包含文件上傳的底層實現,不包括UI部分。因此交互方面能夠自由發揮,如下將演示如何去實現一個簡單的版本。php

請點擊下面的選擇文件按鈕,而後點擊開始上傳體驗此Demo。css

2-1.png

上傳出錯java

選擇文件
  

Html部分

首先準備dom結構,包含存放文件信息的容器、選擇按鈕和上傳按鈕三個部分。web

  
  1. <div id= "uploader" class= "wu-example" >
  2. <!--用來存放文件信息-->
  3. <div id= "thelist" class= "uploader-list" ></div>
  4. <div class= "btns" >
  5. <div id= "picker" >選擇文件 </div>
  6. <button id= "ctlBtn" class= "btn btn-default" >開始上傳 </button>
  7. </div>
  8. </div>

初始化Web Uploader

具體說明,請看一下代碼中的註釋部分。app

  
  1. var uploader = WebUploader . create ({
  2. // swf文件路徑
  3. swf : BASE_URL + '/js/Uploader.swf' ,
  4. // 文件接收服務端。
  5. server : 'http://webuploader.duapp.com/server/fileupload.php' ,
  6. // 選擇文件的按鈕。可選。
  7. // 內部根據當前運行是建立,多是input元素,也多是flash.
  8. pick : '#picker' ,
  9. // 不壓縮image, 默認若是是jpeg,文件上傳前會壓縮一把再上傳!
  10. resize : false
  11. });

顯示用戶選擇

因爲webuploader不處理UI邏輯,因此須要去監聽fileQueued事件來實現。dom

  
  1. // 當有文件被添加進隊列的時候
  2. uploader . on ( 'fileQueued' , function ( file ) {
  3. $list . append ( '<div id="' + file . id + '" class="item">' +
  4. '<h4 class="info">' + file . name + '</h4>' +
  5. '<p class="state">等待上傳...</p>' +
  6. '</div>' );
  7. });

文件上傳進度

文件上傳中,Web Uploader會對外派送uploadProgress事件,其中包含文件對象和該文件當前上傳進度。spa

  
  1. // 文件上傳過程當中建立進度條實時顯示。
  2. uploader . on ( 'uploadProgress' , function ( file , percentage ) {
  3. var $li = $ ( '#' + file . id ),
  4. $percent = $li . find ( '.progress .progress-bar' );
  5. // 避免重複建立
  6. if ( ! $percent . length ) {
  7. $percent = $ ( '<div class="progress progress-striped active">' +
  8. '<div class="progress-bar" role="progressbar" style="width: 0%">' +
  9. '</div>' +
  10. '</div>' ). appendTo ( $li ). find ( '.progress-bar' );
  11. }
  12. $li . find ( 'p.state' ). text ( '上傳中' );
  13. $percent . css ( 'width' , percentage * 100 + '%' );
  14. });

文件成功、失敗處理

文件上傳失敗會派送uploadError事件,成功則派送uploadSuccess事件。無論成功或者失敗,在文件上傳完後都會觸發uploadComplete事件。code

  
  1. uploader . on ( 'uploadSuccess' , function ( file ) {
  2. $ ( '#' + file . id ). find ( 'p.state' ). text ( '已上傳' );
  3. });
  4. uploader . on ( 'uploadError' , function ( file ) {
  5. $ ( '#' + file . id ). find ( 'p.state' ). text ( '上傳出錯' );
  6. });
  7. uploader . on ( 'uploadComplete' , function ( file ) {
  8. $ ( '#' + file . id ). find ( '.progress' ). fadeOut ();
  9. });

圖片上傳

與普通文件上傳相比,此demo演示了:文件過濾,圖片預覽,圖片壓縮上傳等功能。orm

1-1.png
上傳失敗
1-2.png
上傳失敗
1-3.png
上傳失敗
選擇圖片

Html

要實現如上demo,首先須要準備一個按鈕,和一個用來存放添加的文件信息列表的容器。

  
  1. <!--dom結構部分-->
  2. <div id= "uploader-demo" >
  3. <!--用來存放item-->
  4. <div id= "fileList" class= "uploader-list" ></div>
  5. <div id= "filePicker" >選擇圖片 </div>
  6. </div>

Javascript

建立Web Uploader實例

  
  1. // 初始化Web Uploader
  2. var uploader = WebUploader . create ({
  3. // 選完文件後,是否自動上傳。
  4. auto : true ,
  5. // swf文件路徑
  6. swf : BASE_URL + '/js/Uploader.swf' ,
  7. // 文件接收服務端。
  8. server : 'http://webuploader.duapp.com/server/fileupload.php' ,
  9. // 選擇文件的按鈕。可選。
  10. // 內部根據當前運行是建立,多是input元素,也多是flash.
  11. pick : '#filePicker' ,
  12. // 只容許選擇圖片文件。
  13. accept : {
  14. title : 'Images' ,
  15. extensions : 'gif,jpg,jpeg,bmp,png' ,
  16. mimeTypes : 'image/*'
  17. }
  18. });

監聽fileQueued事件,經過uploader.makeThumb來建立圖片預覽圖。
PS: 這裏獲得的是Data URL數據,IE六、IE7不支持直接預覽。能夠藉助FLASH或者服務端來完成預覽。

  
  1. // 當有文件添加進來的時候
  2. uploader . on ( 'fileQueued' , function ( file ) {
  3. var $li = $ (
  4. '<div id="' + file . id + '" class="file-item thumbnail">' +
  5. '<img>' +
  6. '<div class="info">' + file . name + '</div>' +
  7. '</div>'
  8. ),
  9. $img = $li . find ( 'img' );
  10. // $list爲容器jQuery實例
  11. $list . append ( $li );
  12. // 建立縮略圖
  13. // 若是爲非圖片文件,能夠不用調用此方法。
  14. // thumbnailWidth x thumbnailHeight 爲 100 x 100
  15. uploader . makeThumb ( file , function ( error , src ) {
  16. if ( error ) {
  17. $img . replaceWith ( '<span>不能預覽</span>' );
  18. return ;
  19. }
  20. $img . attr ( 'src' , src );
  21. }, thumbnailWidth , thumbnailHeight );
  22. });

而後剩下的就是上傳狀態提示了,當文件上傳過程當中, 上傳成功,上傳失敗,上傳完成都分別對應uploadProgress,uploadSuccessuploadErroruploadComplete事件。

  
  1. // 文件上傳過程當中建立進度條實時顯示。
  2. uploader . on ( 'uploadProgress' , function ( file , percentage ) {
  3. var $li = $ ( '#' + file . id ),
  4. $percent = $li . find ( '.progress span' );
  5. // 避免重複建立
  6. if ( ! $percent . length ) {
  7. $percent = $ ( '<p class="progress"><span></span></p>' )
  8. . appendTo ( $li )
  9. . find ( 'span' );
  10. }
  11. $percent . css ( 'width' , percentage * 100 + '%' );
  12. });
  13. // 文件上傳成功,給item添加成功class, 用樣式標記上傳成功。
  14. uploader . on ( 'uploadSuccess' , function ( file ) {
  15. $ ( '#' + file . id ). addClass ( 'upload-state-done' );
  16. });
  17. // 文件上傳失敗,顯示上傳出錯。
  18. uploader . on ( 'uploadError' , function ( file ) {
  19. var $li = $ ( '#' + file . id ),
  20. $error = $li . find ( 'div.error' );
  21. // 避免重複建立
  22. if ( ! $error . length ) {
  23. $error = $ ( '<div class="error"></div>' ). appendTo ( $li );
  24. }
  25. $error . text ( '上傳失敗' );
  26. });
  27. // 完成上傳完了,成功或者失敗,先刪除進度條。
  28. uploader . on ( 'uploadComplete' , function ( file ) {
  29. $ ( '#' + file . id ). find ( '.progress' ). remove ();
  30. });
相關文章
相關標籤/搜索