Struts2多文件上傳,比較簡單的思想是,在Action中,通過依賴注入獲取上傳文件的相關屬性,再用 文件輸入流和文件輸出流來把文件存在服務器相關路徑中。當然,由于是多文件上傳,文件的相關屬性是用數組或List來定義的。下面我給個用數組做多文件上傳的例子。
(1)Struts2文件上傳首先是視圖層,用JSP。
頁面文件為:
upload.jsp< %@ page contentType="text/html;charset=gb2312" %> < A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%> < HTML xhtml? 1999 www.w3.org http: xmlns="< A href=">http://www.w3.org/1999/xhtml< /A>"> < HEAD>
< ?xml:namespace prefix = s />< s:fielderror>< /s:fielderror>
< FORM encType=multipart/form-data method=post action=upload.action> 文件標題< INPUT name=title>
第一個上傳文件:< INPUT type=file name=upload>
第二個上傳文件:< INPUT type=file name=upload>
第三個上傳文件:< I name="upload" type="file" NPUT>
< INPUT value=上傳 type=submit> < /FORM> |
(2)控制器Action
package com.wing.study.upload;
import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import java.io.File; import java.io.FileOutputStream; import java.io.FileInputStream; public class UploadAction extends ActionSupport { private String title; private File[] upload; private String[] uploadContentType; private String[] uploadFileName; private String savePath; public void setSavePath(String value) { this.savePath=value; } public String getSavePath() { return ServletActionContext.getRequest().getRealPath(savePath); } public void setUpload(File[] upload) { this.upload=upload; } public File[] getUpload() { return upload; } public void setTitle(String title) { this.title=title; } public String getTitle() { return title; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType=uploadContentType; } public String[] getUploadContentType() { return (this.uploadContentType); } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName=uploadFileName; } public String[] getUploadFileName() { return (this.uploadFileName); } public String execute() throws Exception { for(int i=0;i { FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName()[i]); FileInputStream fis = new FileInputStream(getUpload()[i]); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer , 0 , len); } } return SUCCESS; } } |
(3)struts.xml配置文件
這里需要控制文件類型和大小。也就是上傳文件過濾。
我在這里不采用手動過濾,因為手動過濾要書寫大量過濾代碼,開發復雜。
所以這里用上傳文件攔截器來控制。
< ?xml version="1.0" encoding="UTF-8"?>
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "< A >
< STRUTS> < CONSTANT value="globalMessages" name="struts.custom.i18n.resources" /> < CONSTANT value="GBK" name="struts.i18n.encoding" />
< PACKAGE name="com" extends="struts-default">
< ACTION class=com.wing.study.upload.UploadAction name="upload"> < INTERCEPTOR-REF name="fileUpload"> < PARAM name="allowedTypes">image/bmp,image/jpeg,image/gif,image/png< /PARAM> < PARAM name="maximumSize">202400< /PARAM> < /INTERCEPTOR-REF> < INTERCEPTOR-REF name="defaultStack" /> < PARAM name="savePath">/upload< /PARAM> < RESULT name="input">/upload.jsp< /RESULT> < RESULT>/succ.jsp< /RESULT> < /ACTION> < /PACKAGE> < /STRUTS> |
注意 使用了上傳文件攔截器,必須顯示的調用默認攔截器棧:defaultStack.
allowedTypes和maximumSize分別過濾文件的類型和大小。
當上傳文件不符合定義的要求時,會轉向邏輯視圖input,然后根據映射轉向物理視圖upload.jsp
然后根據Struts2標簽s:fielderror輸出錯誤信息。當然這里的錯誤信息你可能不知道是什么。不過可以在國際化資源中將錯誤信息用中文替代。
當上傳文件符合定義的要求時,會轉向succ.jsp
這里給出succ.jsp代碼。
< %@ page language="java" contentType="text/html; charset=GBK"%> << A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%> < HTML> 上傳成功!
文件標題:< ?xml:namespace prefix = s />< s:property value=" + title">< /s:property>
第一個文件為: "/>
第二個文件為: "/>
第三個文件為: "/>
|
上傳成功后,會依次顯示你上傳的圖片。通過s:property標簽來獲取圖片地址。
由上面可以看出,通過Struts2來實現文件的上傳甚至是多文件上傳,并不難。
PS:我做的手機帶BOSS射擊類游戲,目前已經制作了240*320和128*160分辨率的。沒辦法,開發模擬器很少能找到128*160分辨率的,所以我先做的240*320的 然后給朋友測試。但是我的手機又是128*160分辨率的,不能在自己手機上用還是很不樂意的。。所以又用手機測試開發的128*160分辨率。
另外關于RPG游戲的戰斗系統和人物菜單系統基本完成。等我把對話系統弄好,就開始開發RPG游戲。
不久前用Swing做了一個類QQ聊天工具的客戶端和服務器端。在同學那里測試可以聊天。但是還是未完成版的。
還做了個簡單的虛擬桌面,也是Swing做的,集成了我開發的一些小軟件在里面。
有人可能會覺得奇怪,為什么我會花時間做JAVA桌面應用。
我只是不想像某些JAVA程序員一樣,聽說JAVA桌面不行,便不去學習。這也是我對中國程序員感到的一絲悲哀。你說JAVA不能開發游戲,但是偏偏國外就有那么多JAVA 3D的網絡游戲,并且在運營中。
每當我聽見他們說不用學這個不用學那個,就有點憤怒。也許正像大家說的,沒有最好的計算機語言,只有最好的程序員。即使是這樣,我想,優秀的程序員,在中國,可能絕無僅有了。
下面是截圖:
桌面圖標可以隨意拖動,第一次使用的時候,會創建一個文件夾根目錄,用來保存一些信息。這只是非常簡單的一個東西。因為我還要花時間做Struts2,Java ME和Java FX.


【編輯推薦】
- 在Eclipse中開發struts應用程序
- 手把手教你在Eclipse中配置開發Struts
- Eclipse下開發struts完整解決亂碼問題
- Struts相關背景介紹
- 使用Easy Struts for Eclipse開發Struts