亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Springmvc+uploadify實現文件帶進度條批量上傳

2019-11-14 14:51:50
字體:
來源:轉載
供稿:網友

 網上看了很多關于文件上傳的帖子,眾口不一,感覺有點亂,最近正好公司的項目里用到JQuery的uploadify控件做文件上傳,所以整理下頭緒,搞篇文檔出來,供親們分享。 

   Uploadify控件的主要優勢是可以實現批量文件上傳,并且提供了onSelect(選中文件)、onUploadSuccess(上傳成功回調函數)等多個事件監聽函數,可以操控上傳的整個流程。

   對uploadify有個簡單的了解后,廢話不多說,開始吧...

(由于這次項目中用到的是ssm框架,所以就以sPRingmvc的后臺處理為例)。

一、在工程中導入uploadify

1、首先,下載uploadify包文件

Uploadify官網 :下載地址  <a>http://www.uploadify.com/</a>

2、解壓包文件,得到如下結構:


 
 

background.jpg   是上傳框的背景圖片

jquery.uploadify.min.js   迷你版的uploadify js文件,主要功能就靠它了

jquery-1.9.1.js   都懂得,版本沒啥要求

uploadify.CSS    上傳組件的美化文件

uploadify.swf    上傳時的動態效果,進度條等

Uploadify-cancel.png   取消上傳按鈕圖片

3、將uplodify文件夾放到webapp下



 

4、導入必須的jar包

commons-fileupload-1.3.1.jar  

commons-io-2.2.jar

使用maven時pom.xml中添加如下依賴即可:

java代碼  收藏代碼
  1. <dependency>  
  2.             <groupId>commons-fileupload</groupId>  
  3.             <artifactId>commons-fileupload</artifactId>  
  4.             <version>1.3.1</version>  
  5. </dependency>  

5、在springmvc.xml文件中加入multipart 的解析器

Java代碼  收藏代碼
  1. <bean  
  2.   
  3. id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  4.   
  5. <property name="maxUploadSize" value="1024000"></property>  
  6.   
  7. <property name="defaultEncoding" value="utf-8"/><!--屬性:編碼-->  
  8.   
  9. </bean>  

 :這個必須配置,一會在controller里抓取上傳文件時要用。否則會報錯。

二、在需要做上傳的頁面中配置

 

6、在頁頭導入

 

 

 

7、在頁面中需要上傳附件的位置插入

 

Java代碼  收藏代碼
  1. <div id="uploadfileQueue"></div> //存放選擇文件的 圖片按鈕的 Div  
  2.   
  3. <input type="file" id="file_upload">  
  4.   
  5. <input type="button" value="上傳"  
  6.  onclick="Javascript:$('#file_upload').uplodify('upload','*')" >  
  7.   
  8. <input type="button" value="取消上傳"  
  9.  onclick="javascript:$('#file_upload').uplodify('cancel','*')" >  
  10.   
  11.     (固定寫法)  

 

8、js中設置

代碼  收藏代碼

  1. <script type="text/javascript">  
  2.   
  3. $(document).ready(function() {  
  4.   
  5.     $("#file_upload").uploadify({  
  6.   
  7.         //是否自動上傳 true or false  
  8.         'auto':false,  
  9.   
  10.         //超時時間上傳成功后,將等待服務器的響應時間。  
  11.         //在此時間后,若服務器未響應,則默認為成功(因為已經上傳,等待服務器的響應) 單位:秒  
  12.         'successTimeout':99999,  
  13.   
  14.         //附帶值 JSON對象數據,將與每個文件一起發送至服務器端。  
  15.         //如果為動態值,請在onUploadStart()中使用settings()方法更改該JSON值  
  16.        'formData':{       //可以不寫  
  17.            'user.username':'',  
  18.            'user.age':''  
  19.            },    
  20.             'onUploadStart': function(file) {   
  21.                 var name=$('#username').val();  
  22.                 var age=$('#age').val();  
  23.                 $("#file_upload").uploadify(  
  24.                 "settings",   
  25.                 "formData",   
  26.                 {'user.username':name,'user.age':age});  
  27.                 },   
  28.         //Flash  
  29.         'swf': "${pageContext.request.contextPath}/uplodify/uploadify.swf",  
  30.   
  31.          //文件選擇后的容器div的id值   
  32.         'queueID':'uploadfileQueue',  
  33.   
  34.          //將要上傳的文件對象的名稱 必須與后臺controller中抓取的文件名保持一致      
  35.         'fileObjName':'pic',  
  36.   
  37.         //上傳地址  
  38.        'uploader':'${pageContext.request.contextPath}/upload/uploadFile',  
  39.   
  40.         //瀏覽將要上傳文件按鈕的背景圖片路徑  
  41.         'buttonImage':'${pageContext.request.contextPath}/uplodify/background.jpg',  
  42.   
  43.         //瀏覽按鈕的寬度  
  44.         'width':'100',  
  45.   
  46.         //瀏覽按鈕的高度  
  47.         'height':'32',  
  48.   
  49.         //在瀏覽窗口底部的文件類型下拉菜單中顯示的文本  
  50.         'fileTypeDesc':'支持的格式:',  
  51.   
  52.         //允許上傳的文件后綴  
  53.         'fileTypeExts':'*.jpg;*.jpge;*.gif;*.png', 有哪些??  
  54.   
  55.         /*上傳文件的大小限制允許上傳文件的最大 大小。 這個值可以是一個數字或字 符串。 
  56.           如果它是一個字符串,它接受一個單位(B, KB, MB, or GB)。 
  57.           默認單位為KB您可以將此值設置為0 ,沒有限制,  
  58.           單個文件不允許超過所設置的值 如果超過 onSelectError時間被觸發*/  
  59.         'fileSizeLimit':'100KB',  
  60.   
  61.         //允許上傳的文件的最大數量。當達到或超過這個數字,onSelectError事件被觸發。  
  62.         'queueSizeLimit' : 3,  
  63.   
  64.         //選擇上傳文件后調用  
  65.         'onSelect' : function(file) {  
  66.               //alert("123");      
  67.         },  
  68.   
  69.         //返回一個錯誤,選擇文件的時候觸發  
  70.         'onSelectError':function(file, errorCode, errorMsg){  
  71.             switch(errorCode) {  
  72.                 case -100:  
  73.                     alert("上傳的文件數量已經超出系統限制的"  
  74.                      +$('#file_upload').uploadify('settings','queueSizeLimit')+"個文件!");  
  75.                     break;  
  76.   
  77.                 case -110:  
  78.                     alert("文件 ["+file.name+"] 大小超出系統限制的"  
  79.                      +$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!");  
  80.                     break;  
  81.   
  82.                 case -120:  
  83.                     alert("文件 ["+file.name+"] 大小異常!");  
  84.                     break;  
  85.   
  86.                 case -130:  
  87.                     alert("文件 ["+file.name+"] 類型不正確!");  
  88.                     break;  
  89.             }  
  90.         },  
  91.   
  92.         //上傳到服務器,服務器返回相應信息到data里  
  93.         'onUploadSuccess':function(file, data, response){  
  94.             alert("上傳成功");  
  95.         },  
  96.   
  97.       //當單個文件上傳出錯時觸發  
  98.         'onUploadError': function (file, errorCode, errorMsg, errorString) {   
  99.             alert("上傳失敗");  
  100.             }   
  101.     });  
  102.   
  103. });  
  104.   
  105. </script>  

9、在controller中,實現上傳

 

Java代碼  收藏代碼
  1. //接收上傳文件  
  2.   
  3. @RequestMapping(value="uploadFile",method=RequestMethod.POST,produces="text/html;charset=utf-8")  
  4.   
  5. @ResponseBody  
  6.   
  7. public String uploadFile(@RequestParam("pic")CommonsMultipartFile pic,HttpServletRequest req,HttpServletResponse response) throws IOException{  
  8.   
  9. //設置文件保存的本地路徑  
  10.   
  11. String filePath = req.getsession().getServletContext().getRealPath("/uploadFiles/");  
  12.   
  13. String fileName = pic.getOriginalFilename();  
  14.   
  15. String fileType = fileName.split("[.]")[1];  
  16.   
  17. //為了避免文件名重復,在文件名前加UUID  
  18.   
  19. String uuid = UUID.randomUUID().toString().replace("-","");  
  20.   
  21. String uuidFileName = uuid + fileName;  
  22.   
  23. File f = new File(filePath+"/"+uuid+"."+fileType);  
  24.   
  25. //將文件保存到服務器  
  26.   
  27. FileUtil.upFile(pic.getInputStream(), uuidFileName, filePath);  
  28.   
  29. return uuidFileName;  
  30.   
  31. }  

 

 

 

 

 

這個過程中要用到FileUtil工具類:

 

Java代碼  收藏代碼
  1. package com.baidu.util;  
  2.   
  3.    
  4.   
  5. import java.io.BufferedInputStream;  
  6.   
  7. import java.io.BufferedOutputStream;  
  8.   
  9. import java.io.File;  
  10.   
  11. import java.io.FileInputStream;  
  12.   
  13. import java.io.FileOutputStream;  
  14.   
  15. import java.io.IOException;  
  16.   
  17. import java.io.InputStream;  
  18.   
  19. import java.io.OutputStream;  
  20.   
  21. import java.util.List;  
  22.   
  23. import java.util.zip.ZipEntry;  
  24.   
  25. import java.util.zip.ZipOutputStream;  
  26.   
  27.    
  28.   
  29. import javax.servlet.http.HttpServletRequest;  
  30.   
  31. import javax.servlet.http.HttpServletResponse;  
  32.   
  33.    
  34.   
  35. public class FileUtil {  
  36.   
  37. /** 
  38.  
  39.  * 單個文件上傳 
  40.  
  41.  * @param is 
  42.  
  43.  * @param fileName 
  44.  
  45.  * @param filePath 
  46.  
  47.  */  
  48.   
  49. public static void upFile(InputStream is,String fileName,String filePath){  
  50.   
  51. FileOutputStream fos = null;  
  52.   
  53. BufferedOutputStream bos = null;  
  54.   
  55. BufferedInputStream bis = null;  
  56.   
  57. File file = new File(filePath);  
  58.   
  59. if(!file.exists()){  
  60.   
  61. file.mkdirs();  
  62.   
  63. }  
  64.   
  65. File f = new File(filePath+"/"+fileName);  
  66.   
  67. try {  
  68.   
  69. bis = new BufferedInputStream(is);  
  70.   
  71. fos = new FileOutputStream(f);  
  72.   
  73. bos = new BufferedOutputStream(fos);  
  74.   
  75. byte[] bt = new byte[4096];  
  76.   
  77. int len;  
  78.   
  79. while((len = bis.read(bt))>0){  
  80.   
  81. bos.write(bt, 0, len);  
  82.   
  83. }  
  84.   
  85. } catch (Exception e) {  
  86.   
  87. e.printStackTrace();  
  88.   
  89. }finally {  
  90.   
  91. try {  
  92.   
  93. if(null != bos){  
  94.   
  95. bos.close();  
  96.   
  97. bos = null;}  
  98.   
  99. if(null != fos){  
  100.   
  101. fos.close();  
  102.   
  103. fos= null;  
  104.   
  105. }  
  106.   
  107. if(null != is){  
  108.   
  109. is.close();  
  110.   
  111. is=null;  
  112.   
  113. }  
  114.   
  115. if (null != bis) {  
  116.   
  117. bis.close();  
  118.   
  119. bis = null;  
  120.   
  121. }  
  122.   
  123. } catch (Exception e) {  
  124.   
  125. e.printStackTrace();  
  126.   
  127. }  
  128.   
  129. }  
  130.   
  131. }  
  132.   
  133. }  

 

 

 

 

10、效果圖



 
 

 



 

三、總結

 

1、多文件的上傳其實是多次調用單文件上傳的方法,我們看到的批量上傳其實是分步執行的,上傳一次調用一次單文件上傳的方法,不要被假象迷惑。

2、上傳成功后可以返回文件的信息,在onUploadSuccess函數中可以獲取到,這樣就可以在頁面上設置一個隱藏域存放返回來的值,比如說文件的id,多文件的話可以在隱藏域中抓取數組。然后隨表單提交,更新表數據,這樣就能方便的把上傳文件的信息添加到數據庫表中。下載地址 

3、有的朋友問,上傳的東西在服務器中,項目重啟就會丟失,怎么辦,其實這個在真實項目中會做專門處理,不需要考慮。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91麻豆国产语对白在线观看| 91av成人在线| 国产精品视频大全| 色综合久久中文字幕综合网小说| 中文字幕无线精品亚洲乱码一区| 国产伊人精品在线| 久久久久久com| 亚洲成人久久一区| 92看片淫黄大片看国产片| 欧美精品激情在线观看| 午夜免费日韩视频| 粗暴蹂躏中文一区二区三区| 欧美在线不卡区| 欧美成人精品h版在线观看| 亚洲精品久久久久久久久久久| 7777精品久久久久久| 亚洲精品99999| 国产精品久久久久久av福利软件| 91精品视频在线播放| 久久久久久有精品国产| 久久久久久噜噜噜久久久精品| 欧美日韩一区二区在线播放| 91国内产香蕉| 欧美日韩国产一区二区三区| 国产xxx69麻豆国语对白| 欧美性猛交xxxx免费看漫画| 亚洲欧美成人在线| 国产日本欧美一区二区三区在线| 久久精品久久久久久国产 免费| 超碰精品一区二区三区乱码| 欧美精品在线免费| 亚洲一区二区三区xxx视频| 日韩成人黄色av| 综合欧美国产视频二区| 欧美大荫蒂xxx| 粉嫩av一区二区三区免费野| 色婷婷综合成人| 亚洲国产99精品国自产| 清纯唯美日韩制服另类| 久久久久久久爱| 国产精品免费久久久| 日韩精品免费一线在线观看| 欧美日韩裸体免费视频| 中文字幕日本欧美| 欧美最猛性xxxxx亚洲精品| 国产区精品在线观看| 在线丨暗呦小u女国产精品| 亚洲国产精品久久91精品| 亚洲一区二区三区四区视频| 欧美精品国产精品日韩精品| 日韩久久免费电影| 欧美日韩亚洲视频| 日韩视频免费在线观看| 欧美日韩爱爱视频| 成人情趣片在线观看免费| 7777kkkk成人观看| 亚洲欧美在线看| 亚洲精品电影久久久| 国产成人精品综合久久久| 91精品国产99久久久久久| 日韩成人网免费视频| 色综合色综合久久综合频道88| 在线免费观看羞羞视频一区二区| 97人洗澡人人免费公开视频碰碰碰| 亚洲精品久久久久中文字幕欢迎你| 最新91在线视频| 92看片淫黄大片看国产片| 欧美成人免费小视频| 亚洲电影在线观看| 亚洲毛茸茸少妇高潮呻吟| 少妇高潮久久久久久潘金莲| 伊人伊成久久人综合网站| 日韩欧美在线观看| 久久久精品在线| 欧美激情乱人伦一区| 国产精品视频最多的网站| 亚洲精品福利免费在线观看| 国产一区二区三区免费视频| 亚洲国产精品国自产拍av秋霞| 亚洲国产成人久久综合一区| 中文字幕不卡在线视频极品| 欧美精品制服第一页| 国产精品一区二区三| 国产精品美女久久久免费| 国产精品色视频| 国内精品伊人久久| 97免费中文视频在线观看| 国内精品免费午夜毛片| 亚洲社区在线观看| 日韩精品在线视频美女| 亚洲a在线播放| 欧美人成在线视频| 国产精品一香蕉国产线看观看| 欧美夫妻性视频| 亚洲视频自拍偷拍| 久久久久久久香蕉网| 91精品在线看| 伊人伊人伊人久久| 欧美在线视频在线播放完整版免费观看| 视频直播国产精品| 97国产成人精品视频| 国产精品精品视频一区二区三区| 亚洲国产婷婷香蕉久久久久久| 久久国产精品亚洲| 26uuu亚洲国产精品| 亚洲精品国产成人| 中文欧美日本在线资源| 黄网站色欧美视频| 亚洲天堂色网站| 欧美性一区二区三区| 欧美福利小视频| 国产精品嫩草影院一区二区| www.久久撸.com| 成人黄色影片在线| 亚洲美女av在线播放| 日韩国产精品视频| 成人黄色片在线| 亚洲人成在线免费观看| 久久久久999| 日韩视频一区在线| 91精品久久久久久久久中文字幕| 亚洲欧美国产一区二区三区| 中文字幕日韩精品在线| 国产欧美日韩综合精品| 亚洲视频999| 精品美女久久久久久免费| 亚洲成人网久久久| 欧美性videos高清精品| 欧美日韩国产限制| 欧美孕妇毛茸茸xxxx| 久久亚洲精品成人| 亚洲加勒比久久88色综合| 欧美另类极品videosbest最新版本| 精品亚洲一区二区三区在线观看| 久久免费在线观看| 日韩精品福利在线| 日韩av在线免费观看一区| 国产精品欧美亚洲777777| 久久天天躁狠狠躁夜夜躁2014| 亚洲va欧美va国产综合剧情| 欧美在线视频网| 国产精品第8页| 日韩在线小视频| 久久亚洲欧美日韩精品专区| 亚洲精品视频免费| 色系列之999| 国内精品久久久久久影视8| 久久精品成人欧美大片古装| 26uuu亚洲伊人春色| 国产精品日本精品| 欧美成人精品在线| 亚洲欧美日韩综合| 欧美日韩免费在线观看| 日韩电影免费在线观看中文字幕| 国产精品电影网| 日韩国产中文字幕| 国模精品视频一区二区三区| 日韩中文字幕免费视频| 国产精品直播网红| 欧美另类极品videosbestfree| 亚洲大胆美女视频| 日韩暖暖在线视频| 欧洲精品在线视频| 欧美中文字幕在线播放|