WebWork之--使用fileUpload interceptor实现文件上传[基本配置+注意事项]
2008-10-31 09:12
1076 查看
使用webwork的fileUpload interceptor,可以很方便的实现文件上传功能。以下为我在编写文件上传功能实现中的一些总结:
一:基本配置
开发环境:
服务器:tomcat 5.X
webwork版本:webwork 2.2.2
另外,需要把apache下的commons FileUpload包放到你的classpath中,我的是直接放置在${app}/WEB-INF/lib目录下
1:webwork.properties配置
webwork.multipart.parser=jakarta #文件解析器类型,备选项包括pell、cos、jakarta
webwork.multipart.saveDir=someDir #临时文件保存路径,最好设置否则会在服务器运行日志中看到很多INFO提醒
webwork.multipart.maxSize=61000 #上传文件的大小上限,单位:byte
2:xwork.xml
<action name="upload" class="uploadAction">
<result name="success">ok.jsp</result>
<result name="error">err.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">512000</param>
<param name="allowedTypes">image/pjpeg,image/gif,image/bmp,image/jpeg</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
</action>
3:upload.jsp
<form name="postForm" method="post" enctype="multipart/form-data" action="upload.action">
<input type="file" name="doc"/>
</form>
4:uploadAction.java
public class UploadAction extends ActionSupport {
private File doc; // 上传保存的临时文件的引用,命名和upload.jsp中doc保持一致
private String docContentType; // 文件类型,该字段命名=文件引用名+"ContentType"
private String docFileName; // 文件名,文件名=文件引用名+FileName
public String execute() {
if (doc == null) { // 当取道的文件引用为null时,表示文件不符合你设定的条件
return ERROR;
}
// 以下为服务器文件传存、重命名等操作,临时文件不用管,fileUpload interceptor会自己处理善后工作。。。
}
// setters方法省略
}
二:上传代码流程说明及注意事项
1)程序走到fileUpload interceptor之前已经对文件在服务器端进行了保存
2)fileUpload interceptor必须在params interceptor之前被调用,否则Action无法获取到文件的引用
3)如果能在客户端进行文件名后缀和大小的判断,需要尽量做完善。尽管大小判断的js在ie下才起作用,并且js可以被轻松绕过,也需要这样做,因为http文件传输是很消耗服务器CPU的
4)当文件大小和类型不符合fileUpload interceptor设置时,action仍旧会执行,此时得到的文件引用为null
5)可以通过getFieldErrors()方法获取fileUpload对于文件拦截操作出来结果,虽然提示信息不是很明确,而且是英文,但至少可以从中分析出是什么原因造成的不能上传
三:参考
WebWork2文档中文化计划 http://wiki.javascud.org/display/ww2cndoc/File+Upload+Interceptor
apache commons FileUpload组件网址 http://commons.apache.org/fileupload/
webwork fileUpload intercrptor英文介绍 http://docs.huihoo.com/webwork/2.2.6/File%20Upload%20Interceptor.html
一:基本配置
开发环境:
服务器:tomcat 5.X
webwork版本:webwork 2.2.2
另外,需要把apache下的commons FileUpload包放到你的classpath中,我的是直接放置在${app}/WEB-INF/lib目录下
1:webwork.properties配置
webwork.multipart.parser=jakarta #文件解析器类型,备选项包括pell、cos、jakarta
webwork.multipart.saveDir=someDir #临时文件保存路径,最好设置否则会在服务器运行日志中看到很多INFO提醒
webwork.multipart.maxSize=61000 #上传文件的大小上限,单位:byte
2:xwork.xml
<action name="upload" class="uploadAction">
<result name="success">ok.jsp</result>
<result name="error">err.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">512000</param>
<param name="allowedTypes">image/pjpeg,image/gif,image/bmp,image/jpeg</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
</action>
3:upload.jsp
<form name="postForm" method="post" enctype="multipart/form-data" action="upload.action">
<input type="file" name="doc"/>
</form>
4:uploadAction.java
public class UploadAction extends ActionSupport {
private File doc; // 上传保存的临时文件的引用,命名和upload.jsp中doc保持一致
private String docContentType; // 文件类型,该字段命名=文件引用名+"ContentType"
private String docFileName; // 文件名,文件名=文件引用名+FileName
public String execute() {
if (doc == null) { // 当取道的文件引用为null时,表示文件不符合你设定的条件
return ERROR;
}
// 以下为服务器文件传存、重命名等操作,临时文件不用管,fileUpload interceptor会自己处理善后工作。。。
}
// setters方法省略
}
二:上传代码流程说明及注意事项
1)程序走到fileUpload interceptor之前已经对文件在服务器端进行了保存
2)fileUpload interceptor必须在params interceptor之前被调用,否则Action无法获取到文件的引用
3)如果能在客户端进行文件名后缀和大小的判断,需要尽量做完善。尽管大小判断的js在ie下才起作用,并且js可以被轻松绕过,也需要这样做,因为http文件传输是很消耗服务器CPU的
4)当文件大小和类型不符合fileUpload interceptor设置时,action仍旧会执行,此时得到的文件引用为null
5)可以通过getFieldErrors()方法获取fileUpload对于文件拦截操作出来结果,虽然提示信息不是很明确,而且是英文,但至少可以从中分析出是什么原因造成的不能上传
三:参考
WebWork2文档中文化计划 http://wiki.javascud.org/display/ww2cndoc/File+Upload+Interceptor
apache commons FileUpload组件网址 http://commons.apache.org/fileupload/
webwork fileUpload intercrptor英文介绍 http://docs.huihoo.com/webwork/2.2.6/File%20Upload%20Interceptor.html
相关文章推荐
- springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
- springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
- AjaxFileUpload文件上传 及注意事项
- angular js 上传插件 angular-file-upload 和 ng-file-upload 使用时注意事项
- 使用apache commons-fileupload.jar 实现文件上传
- 使用Ajaxfileupload插件分别实现单文件和多文件上传
- Spring MVC使用commons fileupload实现文件上传功能
- 使用jquery插件uploadify结合commons fileupload实现多文件上传
- 使用ajaxfileupload.js插件实现Ajax方式上传文件
- Flash中使用Filereference上传文件的一些注意事项
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
- [转] Flash中使用Filereference上传文件的一些注意事项
- 使用ajaxfileupload.js实现ajax上传文件php版
- apache uploadfile 文件上传注意事项
- 使用apache commons-fileupload.jar 实现文件上传
- js使用AjaxFileupload插件实现文件上传
- 使用AjaxFileUpload.js实现异步文件上传示例
- 使用AjaxFileUpload.js实现文件异步上传
- 使用ajaxFileUpload.js插件实现ajax无刷新上传文件
- 使用ajaxFileUpload.js插件实现ajax无刷新上传文件