struts之文件上传

来源:互联网 发布:淘宝店客服怎样设置 编辑:程序博客网 时间:2024/06/05 05:48

fileUpload拦截器

Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用手工配置
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
该拦截器为commons-fileUpload,它会查看当前请求是否enctype=“multipart/form-data ”,如果不是则放行。如果是,则解析表单,然后把解析的结果传递给Action的属性。


一、单文件上传

fileUpload拦截器要求Action需要提供3个属性:
File fieldName
String fieldNameContentType;
String fieldNameFileName;

1.form表单中必须要有enctype=“multipart/form-data ”

<form action="/UploadAction.action>" method="post" enctype="multipart/form-data"><input type="file" name="image"/></form>

2.Action中必须要有3个属性,并且前缀都必须与文件表单项名称一致

class MyAction {   private File image;//封装上传文件的数据   private String imageFileName;//封装上传文件的名称   private String imageContentType;//封装上传文件的MIME类型}
简记:1:3  表单中一个属性对应Action中三个属性


二、多文件上传


在表单中设置所有<input type=”file”>的名称为相同名称,然后在Action中给出数组属性即可。

<form action="/UploadsAction.action" method="post" enctype="multipart/form-data">用户名: <input type="text" name="username"/><br/>文 件1:<input type="file" name="myUpload"/><br/>文 件2:<input type="file" name="myUpload"/><br/>文 件3:<input type="file" name="myUpload"/><br/><input type="submit" value="Submit"/></form>

public class UploadsAction extends ActionSupport {private File[] myUpload;private String[] myUploadContentType;private String[] myUploadFileName;}

上传配置
可以通过Struts2的常量来完成对上传的配置,下面是与上传相关的常量:
struts.multipart.parser:指定使用的上传组件,默认值为jakarta,表示使用commons-fileupload组件,Struts2还支持cos和pell;
struts.multipart.saveDir:临时目录,如果没有指定临时目录,那么临时文件会在Tomcat的work目录中;
struts.multipart.maxSize:整个大小限制,默认值为2097152,即2M。注意,这个限制是整个请求的大小,而不是单一文件的大小。

<struts><constant name="struts.devMode" value="true" /><!--请求总大小上限 --><constant name="struts.multipart.maxSize" value="1048576" /><package name="s8" namespace="/" extends="struts-default"><action name="UploadAction" class="cn.itcast.upload.action.UploadAction"><result name="input">/demo1/upload.jsp</result><param name="savepath">/WEB-INF/uploads</param><!-- 指定当前action的拦截器为defaultStack栈,对fileUpload拦截器进行了参数配置。 --><interceptor-ref name="defaultStack"><!-- 限制单个文件大小上限为512K --><param name="fileUpload.maximumSize">524288[单个文件大小上限为512K]</param><!-- 限制上传文件的类型 --><param name="fileUpload.allowedExtensions">jpg,png,bmp</param></interceptor-ref></action></package></struts>


<input type="file" name="image"/>
class MyAction {   private File image;//封装上传文件的数据   private String imageFileName;//封装的是上传文件的名称   private String imageContentType;//封装的是上传文件的MIME类型}
如上:Action中的3个属性前缀与表单中的name的值一致。(1:3)

原创粉丝点击