Stripes tips(14)- 文件上传

2769阅读 0评论2009-03-24 hantsy
分类:Java

电子相册,论坛注册添加一个个性化图标,等等,这些都是很常见的 web 应用,都需要文件上传功能把本地的文件上传到远程的服务器。

与普通的 Form 不同的是,文件上传的表单 form 标签必须添加一个 enctype="multipart/form-data" 属性,当使用标签 stripes:form 时它会自动添加这一属性。当表单提交后,表单数据以字节流的方式传递到远程服务器。如果自己分析上传表单内容,是件麻烦事。

cos 和 commons-fileupload 是两种主流的上传工具,内置了表单分析方法。 Stripes 对他们进行了包装,不需要了解两种工具的上传操作的细节。提供了统一的接口,从一种实现切换到另一种实现,不需要修改任何代码。

基于程序的向前的兼容性考虑,Stripes 自带了 cos ,你可以通过简单的配置决定使用哪一种后端实现。如果你想使用 commons-fileupload 后端来处理文件上传,在 Stripes Filter 上添加一个初始化参数。


MultipartWrapper.Class
net.sourceforge.stripes.controller.multipart.CommonsMultipartWrapper


你可以从 上下载最新的 Commons FileUpload 。同时它还依赖其它 Commons包,你至少要添加一个 Commons IO。

你可以通过另外一个参数 FileUpload.MaximumPostSize 来控制上传文件的大小,但必须注意的是这一参数控制的是整个上传表单的数据大小,而不是文件的大小。一般情况下,其它输入字段的体积相对较小,如果你允许上传体积为 1mb 以上的文件,这些体积几乎可以忽略不计。

[警告]警告
FileUpload.MaximumPostSize 限制的整个表单上传数据的大小。

单个文件上传

创建多文件上传

创建上传文件页面。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
"">
<%@taglib prefix="stripes" uri="" %>
<%@taglib prefix="c" uri="" %>



Upload File Page


Upload File!






File ${loop.index+1}:







创建 ActionBean,处理文件上传,一个List 包装上传的文件。

public class MultiUploadActionBean extends BaseActionBean {

private final static Log log = LogFactory.getLog(MultiUploadActionBean.class);
private List uploadFiles =new ArrayList();

public List getUploadFiles() {
return uploadFiles;
}

public void setUploadFiles(List uploadFiles) {
this.uploadFiles = uploadFiles;
}

@DefaultHandler
public Resolution preUpload() {
return new ForwardResolution("/upload2.jsp");
}

public Resolution upload() {

for (FileBean uploadFile : uploadFiles) {
if (uploadFile != null) {
log.debug("Upload File :" + uploadFile.getFileName());
log.debug("File size:" + uploadFile.getSize());
String rootPath = getContext().getServletContext().getRealPath("/");
try {
uploadFile.save(new File(rootPath + "/public/" + uploadFile.getFileName()));
} catch (IOException ex) {
log.debug("Upload file exception, root cause @" + ex);
}
}
}

return new ForwardResolution("/success2.jsp");
}
}

创建结果页面。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="" %>
"">




Upload Result Page


Uploaded Successfully!


File Name is:




${fileVar.fileName}






上一篇:Stripes tips(13)- 多页面表单处理
下一篇:Stripes tips(15)- 文件下载