- 论坛徽章:
- 0
|
电子相册,论坛注册添加一个个性化图标,等等,这些都是很常见的 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
你可以从
Apache Commons
上下载最新的 Commons FileUpload 。同时它还依赖其它 Commons包,你至少要添加一个 Commons IO。
你可以通过另外一个参数 FileUpload.MaximumPostSize 来控制上传文件的大小,但必须注意的是这一参数控制的是整个上传表单的数据大小,而不是文件的大小。一般情况下,其它输入字段的体积相对较小,如果你允许上传体积为 1mb 以上的文件,这些体积几乎可以忽略不计。
file:///home/hantsy/Projects/dbktools/stripes-tutorial/build/html/admonitions/warning.gif
警告FileUpload.MaximumPostSize 限制的整个表单上传数据的大小。单个文件上传
创建JSP 文件。
Upload File Page
Upload File
Upload more than one files at the same time.
创建 ActionBean 处理文件上传。
public class UploadActionBean extends BaseActionBean {
private final static Log log = LogFactory.getLog(UploadActionBean.class);
private FileBean uploadFile;
private long uploadFileSize;
public long getUploadFileSize() {
return uploadFileSize;
}
public void setUploadFileSize(long uploadFileSize) {
this.uploadFileSize = uploadFileSize;
}
public FileBean getUploadFile() {
return uploadFile;
}
public void setUploadFile(FileBean uploadFile) {
this.uploadFile = uploadFile;
}
public Resolution upload() {
log.debug("Upload File :" + uploadFile.getFileName());
log.debug("File size:" + uploadFile.getSize());
log.debug("File Content type:" + uploadFile.getContentType());
this.uploadFileSize = 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("/success.jsp");
}
}
上传结果页面。
Upload Result Page
Uploaded Successfully!
File Name is: ${actionBean.uploadFile.fileName}.
File Size is: ${actionBean.uploadFileSize}
运行程序,上传一个文件进行测试。
多文件上传
创建上传文件页面。
Upload File Page
Upload File!
" scope="page"/>
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");
}
}
创建结果页面。
Upload Result Page
Uploaded Successfully!
File Name is:
${fileVar.fileName}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1096/showart_1878430.html |
|