1.设置表单提交方式method="POST" 编码类型enctype="multipart/form-data",注意及时struts2默认表单提交方式是post的,也要设置一下,否则日志中会warn。
2.在上传的Action中,配置以下属性:
String savePath-----上传的目录见struts.xml配置
File xx-----文件域,与表单的文件域name属性一致
String xxFileName-----上传的文件名
String xxContentType-----上传的文件类型
3.struts.xml的配置
<action name="upload" class="uploadAction">
<param name="savePath">/upload01</param>
...
配置拦截器
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型,多个用","分隔 -->
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg
,image/x-png, image/pjpeg
</param>
<!-- 配置允许上传的文件大小,单位字节 -->
<param name="maximumSize">102400</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</action>
看一个例子吧
jsp页面
<s:form action="fileAction" namespace="/file" method="POST" enctype="multipart/form-data"> <!-- name为后台对应的参数名称 --> <s:file name="files" label="file1"></s:file> <s:file name="files" label="file2"></s:file> <s:file name="files" label="file3"></s:file> <s:submit value="提交" id="submitBut"> </s:submit> </s:form>
下面是后台代码:
//单个文件上传可以用 File files,String filesFileName,String filesContentType //名称要与jsp中的name相同(三个变量都要生成get,set) private File[] files; // 要以File[]变量名开头 private String[] filesFileName; // 要以File[]变量名开头 private String[] filesContentType; private ServletContext servletContext; //Action调用的上传文件方法 public String execute() { ServletContext servletContext =ServletActionContext.getServletContext(); String dataDir = servletContext.getRealPath("/file/upload"); System.out.println(dataDir); for (int i = 0; i < files.length; i++) { File saveFile = new File(dataDir, filesFileName[i]); files[i].renameTo(saveFile); } return "success"; }
配置上传文件临时文件夹(在struts.xml中配置)
<constant name="struts.multipart.saveDir" value="c:/temp"/>