页面文件为: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 href="http://struts.apache.org/dtds/struts-2.0.dtd"> http://struts.apache.org/dtds/struts-2.0.dtd"> < 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
上传成功后,会依次显示你上传的图片。通过s:property标签来获取图片地址。
由上面可以看出,通过Struts2来实现文件的上传甚至是多文件上传,并不难。