这些天做项目,遇到struts2 文件上传的问题,过程曲折。虽然网上有好多资料,但是自己还是在整理一下,总结自己走的弯路,说说容易出错的地方:
1、jsp
<s:form action="XXXaction" method ="POST" enctype="multipart/form-data">
<s:file name="photo"/><input name="add" type="submit" class="bAdd" value="Excel导入" />
</s:form>
在类似上面的jsp中<from>中的【method ="POST"】和【 enctype="multipart/form-data"】必不可少。所以类似
<input type="button" value="添加" οnclick="window.location.href=xxx.action'" />这样的直接URL提交方式是不行的。就这个问题搞了我好久。
2、Action中的代码:属性“contentType”和“fileName”是必须的,名字不能变。“photo”就是jsp页面中的属性。方法setPhotoFileName(String fileName) 和setPhotoContentType(String contentType) 名字也不能变。
/** 头像 */
private File photo;
/** 文件类型 */
private String contentType;
/** 文件名 */
private String fileName;
/**
* 头像文件的取得
* @return 现在设定的值
*/
public File getPhoto() {
return photo;
}
/**
* 头像文件的设置
* @param empExcel新属性的值
*/
public void setPhoto(File photo) {
this.photo= photo;
}
/**
* 文件类型的取得
* @return
*/
public String getContentType() {
return contentType;
}
/**
* 文件名的取得
* @return 现在设定的值
*/
public String getFileName() {
return fileName;
}
/**
* 文件名的设置
* @param fileName新属性的值
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* 取得文件名
* @param fileName
*/
public void setPhotoFileName(String fileName) {
this.fileName = fileName;
}
/**
* 取得文件类型
* @param contentType新属性的值
*/
public void setPhotoContentType(String contentType) {
this.contentType = contentType;
}
3、struts.xml配置文件:<param name="allowedTypes">这个主要是配置可上传的文件类型,具体参数可在网上搜一下,很容易的。
<action name="upload"
class="xxx.UploadAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<param name="allowedTypes">
image/bmp,image/PNG,image/gif,image/JPEG,image/jpg,image/pjpeg
</param>
<param name="maximumSize">102400000</param>
<result name="error">/xxx.jsp</result>
<result name="success">/xxx.jsp</result>
</action>
4、struts2 的文件上传需要两个jar包:commons-io-1.3.2.jar;commons-fileupload-1.2.1.jar;具体的版本自己选,最新的应该没有问题。
似乎除了这些,没什么问题了。其实还是挺简单的,但有时候就是有些不太注意的小问题卡老半天,老闹心了。