国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Struts2教程:上傳任意多個文件

開發 后端
本文為Struts2教程,本部分教你如何上傳任意多個文件。Struts2雖然在大版本號上是第二個版本,但基本上在配置和使用上已經完全顛覆了Struts1.x的方式。

一、上傳單個文件

上傳文件是很多Web程序都具有的功能。在Struts1.x中已經提供了用于上傳文件的組件。而在Struts2中提供了一個更為容易操作的上傳文件組件。所不同的是,Struts1.x的上傳組件需要一個ActionForm來傳遞文件,而Struts2的上傳組件是一個攔截器(這個攔截器不用配置,是自動裝載的)。在本文中先介紹一下如何用struts2上傳單個文件,***介紹一下用struts2上傳任意多個文件。

要用Struts2實現上傳單個文件的功能非常容易實現,只要使用普通的Action即可。但為了獲得一些上傳文件的信息,如上傳文件名、上傳文件類型以及上傳文件的Stream對象,就需要按著一定規則來為Action類增加一些getter和setter方法。

在Struts2中,用于獲得和設置java.io.File對象(Struts2將文件上傳到臨時路徑,并使用java.io.File打開這個臨時文件)的方法是getUpload和setUpload。獲得和設置文件名的方法是getUploadFileName和setUploadFileName,獲得和設置上傳文件內容類型的方法是getUploadContentType和setUploadContentType。下面是用于上傳的動作類的完整代碼:

  1. package action;  
  2.  
  3. import java.io.*;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5.  
  6. public class UploadAction extends ActionSupport   
  7. {  
  8.     private File upload;  
  9.     private String fileName;  
  10.     private String uploadContentType;  
  11.       
  12.     public String getUploadFileName()  
  13.     {  
  14.         return fileName;  
  15.     }  
  16.  
  17.     public void setUploadFileName(String fileName)  
  18.     {  
  19.         this.fileName = fileName;  
  20.     }  
  21.  
  22.     public File getUpload()  
  23.     {  
  24.         return upload;  
  25.     }  
  26.  
  27.     public void setUpload(File upload)  
  28.     {  
  29.         this.upload = upload;  
  30.     }  
  31.     public void setUploadContentType(String contentType)  
  32.     {  
  33.         this.uploadContentType=contentType;  
  34.       
  35.     }  
  36.       
  37.     public String getUploadContentType()  
  38.     {  
  39.         return this.uploadContentType;  
  40.     }  
  41.     public String execute() throws Exception  
  42.     {     
  43.         java.io.InputStream is = new java.io.FileInputStream(upload);  
  44.         java.io.OutputStream os = new java.io.FileOutputStream("d:\\upload\\" + fileName);  
  45.         byte buffer[] = new byte[8192];  
  46.         int count = 0;  
  47.         while((count = is.read(buffer)) > 0)  
  48.         {  
  49.             os.write(buffer, 0, count);  
  50.         }  
  51.         os.close();  
  52.         is.close();  
  53.         return SUCCESS;  
  54.     }  
  55. }  

在execute方法中的實現代碼就很簡單了,只是從臨時文件復制到指定的路徑(在這里是d:\upload)中。上傳文件的臨時目錄的默認值是javax.servlet.context.tempdir的值,但可以通過struts.properties(和struts.xml在同一個目錄下)的struts.multipart.saveDir屬性設置。Struts2上傳文件的默認大小限制是2M(2097152字節),也可以通過struts.properties文件中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上傳文件的總大小不能超過2K字節。

下面的代碼是上傳文件的JSP頁面代碼:

  1.  
  2. < %@ page language="java" import="java.util.*" pageEncoding="GBK"%> 
  3. < %@ taglib prefix="s" uri="/struts-tags"%> 
  4.  
  5. < html> 
  6.     < head> 
  7.         < title>上傳單個文件< /title> 
  8.     < /head> 
  9.  
  10.     < body> 
  11.         < s:form action="upload" namespace="/test" 
  12.             enctype="multipart/form-data"> 
  13.             < s:file name="upload" label="輸入要上傳的文件名" /> 
  14.             < s:submit value="上傳" /> 
  15.         < /s:form> 
  16.  
  17.     < /body> 
  18. < /html> 

也可以在success.jsp頁中通過< s:property>獲得文件的屬性(文件名和文件內容類型),代碼如下:

< s:property value="uploadFileName"/>

二、上傳任意多個文件

在Struts2中,上傳任意多個文件也非常容易實現。首先,要想上傳任意多個文件,需要在客戶端使用DOM技術生成任意多個< input type=”file” />標簽。name屬性值都相同。代碼如下:

  1. < html> 
  2.     < head> 
  3.         < script language="javascript"> 
  4.  
  5. function addComponent()  
  6. {  
  7.         var uploadHTML = document.createElement( "< input type='file'  name='upload'/>");  
  8.         document.getElementById("files").appendChild(uploadHTML);  
  9.         uploadHTML = document.createElement( "< p/>");  
  10.         document.getElementById("files").appendChild(uploadHTML);  
  11. }  
  12. < /script> 
  13.     < /head> 
  14.     < body> 
  15.         < input type="button" onclick="addComponent();" value="添加文件" /> 
  16.         < br /> 
  17.         < form onsubmit="return true;" action="/struts2/test/upload.action" 
  18.             method="post" enctype="multipart/form-data"> 
  19.             < span id="files"> < input type='file' name='upload' /> 
  20.                 < p /> 
  21.             < /span> 
  22.             < input type="submit" value="上傳" /> 
  23.         < /form> 
  24.     < /body> 
  25.  
  26. < /html> 

上面的javascript代碼可以生成任意多個< input type=’file’>標簽,name的值都為file(要注意的是,上面的javascript代碼只適合于IE瀏覽器,firefox等其他瀏覽器需要使用他的代碼)。至于Action類,和上傳單個文件的Action類基本一至,只需要將三個屬性的類型改為List即可。代碼如下:

  1. package action;  
  2.  
  3. import java.io.*;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5.  
  6. public class UploadMoreAction extends ActionSupport  
  7. {  
  8.     private java.util.List< File> uploads;  
  9.     private java.util.List< String> fileNames;  
  10.     private java.util.List< String> uploadContentTypes;  
  11.  
  12.     public java.util.List< String> getUploadFileName()  
  13.     {  
  14.         return fileNames;  
  15.     }  
  16.     public void setUploadFileName(java.util.List< String> fileNames)  
  17.     {  
  18.         this.fileNames = fileNames;  
  19.     }  
  20.     public java.util.List< File> getUpload()  
  21.     {  
  22.         return uploads;  
  23.     }  
  24.  
  25.     public void setUpload(java.util.List< File> uploads)  
  26.     {  
  27.         this.uploads = uploads;  
  28.     }  
  29.  
  30.     public void setUploadContentType(java.util.List< String> contentTypes)  
  31.     {  
  32.         this.uploadContentTypes = contentTypes;  
  33.  
  34.     }  
  35.  
  36.     public java.util.List< String> getUploadContentType()  
  37.     {  
  38.         return this.uploadContentTypes;  
  39.     }  
  40.  
  41.     public String execute() throws Exception  
  42.     {  
  43.         if (uploads != null)  
  44.         {  
  45.             int i = 0;  
  46.             for (; i <  uploads.size(); i++)  
  47.             {  
  48.                 java.io.InputStream is = new java.io.FileInputStream(uploads.get(i));  
  49.                 java.io.OutputStream os = new java.io.FileOutputStream(  
  50.                         "d:\\upload\\" + fileNames.get(i));  
  51.                 byte buffer[] = new byte[8192];  
  52.                 int count = 0;  
  53.                 while ((count = is.read(buffer)) > 0)  
  54.                 {  
  55.                     os.write(buffer, 0, count);  
  56.                 }  
  57.                 os.close();  
  58.                 is.close();  
  59.             }  
  60.         }  
  61.         return SUCCESS;  
  62.     }  
  63. }  

在execute方法中,只是對List對象進行枚舉,在循環中的代碼和上傳單個文件時的代碼基本相同。如果讀者使用過struts1.x的上傳組件,是不是感覺Struts2的上傳功能更容易實現呢?在Struts1.x中上傳多個文件時,可是需要建立帶索引的屬性的。而在Struts2中,就是這么簡單就搞定了。圖1是上傳任意多個文件的界面。

上傳任意多個文件的界面


圖1

【編輯推薦】

  1. Struts2教程:在Action類中獲得HttpServletResponse對象
  2. Struts2教程:使用Validation框架驗證數據
  3. Struts2教程:使用validate方法驗證數據
  4. Struts2教程:struts.xml常用配置解析
  5. Struts2教程:處理一個form多個submit
責任編輯:yangsai 來源: BlogJava
相關推薦

2009-02-04 14:00:59

2009-06-04 09:41:50

struts2上傳文件

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-02-04 11:00:44

2009-06-08 16:44:00

Struts2文件上傳

2009-06-25 15:22:03

Struts2教程一個form多個sub

2009-02-04 10:51:07

2009-06-03 14:19:34

Struts2Guice

2009-06-25 16:04:30

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-06-04 08:34:24

Struts2配置struts.xml

2009-02-04 15:04:13

2009-06-25 15:54:42

Struts2教程攔截器

2009-02-04 11:37:15

2009-07-29 09:54:34

struts2和str

2009-02-04 14:19:38

2009-06-25 15:37:12

Struts2教程Validation框

2009-06-25 15:33:12

Struts2教程使用validate驗證數據

2009-06-04 08:53:57

struts2視頻教程

2009-02-04 13:13:03

點贊
收藏

51CTO技術棧公眾號

中文字幕高清在线播放| 国产在线一区不卡| 成人av午夜影院| 97在线观看视频国产| 尤物视频网站在线观看| 成人av电影在线| 国外成人免费视频| 国产伦精品一区二区三区在线| 九九热久久66| 99久久www免费| 午夜视频一区二区| 久久久久天天天天| 九色porny丨入口在线| 国产成人精品一区二| 日韩精品中文字幕在线播放| 中文字幕在线亚洲三区| 欧美影视资讯| 911精品国产一区二区在线| 91插插插插插插插插| 五月婷婷六月综合| 在线播放亚洲激情| 国产三级电影在线观看| 99久久99久久综合| 福利视频久久| 亚洲国产高清在线观看| 日韩美女视频一区二区在线观看| av无码精品一区二区三区| 99热这里只有成人精品国产| 亚洲欧美日韩国产精品| 国产乱子伦农村叉叉叉| 亚洲国产黄色| 日本一区二区三区四区| 亚洲色图国产精品| 欧美精品成人网| 成人三级伦理片| 不卡中文字幕在线| 美女一区二区三区在线观看| 国自产拍偷拍福利精品免费一| av亚洲产国偷v产偷v自拍| 精品精品导航| 日韩va欧美va亚洲va久久| 99蜜桃在线观看免费视频网站| 天堂网av成人| 91av在线看| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美理论片在线观看| 国产一精品一av一免费爽爽| 欧美成人剧情片在线观看| 国产精品一区二区美女视频免费看 | 免费成年网站| 中文字幕一区在线观看视频| 狠狠热免费视频| 久久精品欧美一区二区三区不卡 | 精精国产xxxx视频在线野外| 亚洲精品720p| 欧美三级精品| 欧美床上激情在线观看| 嗯用力啊快一点好舒服小柔久久| 欧美成人国产va精品日本一级| 亚洲3区在线| 欧美在线视频一二三| 欧美成免费一区二区视频| 国内成+人亚洲| 国产在线青青草| 欧美成人网在线| 亚洲a级精品| 日本一区二区三区精品视频| 亚洲福利天堂| 精品处破学生在线二十三| 白白色在线观看| 91精品国产自产精品男人的天堂| 国产精品久久久久三级| www.成人69.com| 日韩欧美国产黄色| 毛片在线播放a| 伊人久久综合97精品| 日韩欧美中文在线观看| 粉嫩绯色av一区二区在线观看| 中文字幕av一区二区三区四区| 欧美久久久久久| 欧美福利视频在线| 久久精品亚洲成在人线av网址| 国产成人精品免费视频| 欧美区日韩区| 手机成人av在线| 国产欧美日韩在线看| 手机福利在线| 一区二区三区视频免费在线观看| 性人久久久久| 日韩av电影免费在线| 国产亚洲一区二区三区| 国产小视频福利在线| 在线观看亚洲视频| 久久视频在线| 欧美做受777cos| 亚洲妇熟xx妇色黄| 松下纱荣子在线观看| 国产成人精彩在线视频九色| 先锋a资源在线看亚洲| 黑森林福利视频导航| 欧美怡红院视频| 日韩一区二区三区精品| 国外成人在线视频网站| 久久久三级国产网站| 日本韩国在线视频爽| 国内免费久久久久久久久久久| 午夜亚洲一区| xxav视频| 亚洲片国产一区一级在线观看| 欧美影院三区| 18禁裸男晨勃露j毛免费观看| 五月婷婷激情综合网| 欧美少妇激情| 国产一区二区三区无遮挡| 久久久www成人免费毛片麻豆| www免费在线观看| 日本精品va在线观看| 国产一区91精品张津瑜| 欧美3p视频在线观看| 欧美另类暴力丝袜| 日本sm残虐另类| 黄色影院在线播放| 久久久爽爽爽美女图片| 激情六月婷婷久久| 成人18在线| 国产精品露脸自拍| 国产三级精品在线| 国产一区二区三区朝在线观看| 欧美极品一区二区| 色综合一个色综合亚洲| 欧美变态挠脚心| 北条麻妃在线视频观看| 精品国产91九色蝌蚪| 欧美+亚洲+精品+三区| 久久精品无码一区二区日韩av| 久久久99久久精品女同性| 美女视频一区二区| a级片国产精品自在拍在线播放| 成人精品aaaa网站| 亚洲精品日日夜夜| 国产无遮挡裸体免费久久| 九色自拍视频在线观看| 亚洲成av人片在线观看香蕉| 国产主播精品| 亚洲一区在线日韩在线深爱| 国产91精品久久久久久| 国产欧美一区二区三区在线看蜜臀| 日韩久久一区二区三区| 婷婷四月色综合| 日韩欧美国产综合| 99re国产精品| 欧美videos极品另类| 国产精品一区视频| 日韩欧美一区二区在线| 日韩精品一区二区久久| 一二三四社区在线视频| 国产麻豆精品theporn| 久久青草伊人| 久久久天堂国产精品女人| 成av人片一区二区| 欧美国产日韩电影| 日韩欧美一区三区| 色青青草原桃花久久综合 | 亚洲高清视频在线观看| 欧美精品自拍偷拍| 国产精品亚洲综合色区韩国| 男人资源在线播放| 欧美一二三区| 精品蜜桃在线看| 精品亚洲aⅴ乱码一区二区三区| 在线免费三级电影网站| 国产情侣第一页| 久久五月情影视| 亚洲素人一区二区| 欧美激情777| 国产一级片在线播放| 欧美日韩三区四区| 亚洲美女在线看| 久久先锋影音av| 少妇一区二区视频| h视频在线播放| 中文字幕一区二区三区在线乱码 | 日韩欧美国产片| 国产精品久久不能| 一本大道综合伊人精品热热| 日韩视频不卡| 国产免费拔擦拔擦8x在线播放| 国产精品久久国产| 97视频在线观看视频免费视频 | 动漫美女被爆操久久久| 欧美一区二区三区四区五区| 日本不卡一区二区三区高清视频| 樱桃视频成人在线观看| 视频二区在线播放| 亚洲一区二区中文| 欧美精品一区二区在线观看| 99久久精品99国产精品| 国产欧美日韩影院| 午夜在线小视频| 青青青在线观看视频|