记得很早之前在直接采用流读取上传文件时遇到如果上传是压缩文件就会被破坏,同时也会有不能获取上传表单中的其他域的值的问题。最近又涉及到上传的需求,对使用的上传组件common-fileupload做一个简单的总结
在common-fileupload中,需要掌握的几个重要接口:
DiskFileItemFactory
FileItemFactory的默认实现,可设置对上传文件实例(FileItem)的各种参数:
1、上传文件保存在内存或硬盘的阀值,默认为10kb
2、上传文件保存的临时路径,默认为System.getProperty("java.io.tmpdir")
可通过构造函数和参数设置
public DiskFileItemFactory(int sizeThreshold, File repository)
//临时文件存储路径
public void setRepository(File repository)
//存储位置阀值
public void setSizeThreshold(int sizeThreshold)
ServletFileUpload
处理上传请求。最重要的是处理上传form表单中的各个域,这里会处理为fileitem和普通的表单。同时提供了上传请求的参数设置:
// headerencoding
upload.setHeaderEncoding("UTF-8");
// 一次请求中上传的所有文件大小
upload.setSizeMax(102400);
// 上传的单个文件大小
upload.setFileSizeMax(1024);
//以上会抛出SizeLimitExceededException异常
// 处理上传进度
upload.setProgressListener(new ProgressListener() {
public void update(long pBytesRead, long pContentLength,
int pItems) {
}
});
FileItem
表示一个multipart/form-data请求中所有的表单域对象实例,包括非file域,可通过isFormField来判断。当然还有比较重要的方法就是write将FileItem写入指定的文件
以下是一些通用的写法:
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小
factory.setSizeThreshold(10240);
// 设置缓冲区目录
factory.setRepository(new File(tempFilePath));
ServletFileUpload upload = new ServletFileUpload(factory);
// 处理编码
upload.setHeaderEncoding("UTF-8");
// 一次请求中上传的所有文件大小
upload.setSizeMax(102400);
// 上传的单个文件大小
upload.setFileSizeMax(1024);
//以上操作如果上传文件超过指定大小,会抛出SizeLimitExceededException异常
// 处理上传进度
upload.setProgressListener(new ProgressListener() {
//pItems当前fileItem、pBytesRead当前fileItem已读取长度、pContentLength当前上传总的长度,即如果是上传多个文件,这里是所有文件的容量,还包括页面中其他域的大小
public void update(long pBytesRead, long pContentLength,
int pItems) {
}
});
//所有表单元素FileItem实例
List<FileItem> items = upload.parseRequest(req);
Iterator<FileItem> iterator = items.iterator();
while (iterator.hasNext()) {
FileItem fileItem = (FileItem) iterator.next();
if(fileItem.isFormField()){
System.out.println(fileItem.getFieldName());
System.out.println(fileItem.getString("UTF-8"));
}else{
fileItem.write(new File(path, fileItem.getName()));
}
}
// 删除缓冲目录
new File(tempFilePath).deleteOnExit();
对一个处理多个上传文件的表单:
<form action="../sa/upload" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="file1">
<input type="file" name="file2">
<input type="file" name="file3">
<input type="input" name="name">
<input type="submit" name="Submit" value="上传">
</form>
上面的代码会读取到三个文件和两个form表单域。当然如果文件上传不满三个也会抛出异常
分享到:
相关推荐
commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...
java中用common-fileupload上传文件的一个很简单的demo展示
开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...
common-fileupload官方文档
赠送jar包:commons-fileupload-1.3.3.jar; 赠送原API文档:commons-fileupload-1.3.3-javadoc.jar; 赠送源代码:commons-fileupload-1.3.3-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom;...
赠送jar包:commons-fileupload-1.4.jar; 赠送原API文档:commons-fileupload-1.4-javadoc.jar; 赠送源代码:commons-fileupload-1.4-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含...
最全的common-FileUpload.jar包,里面有三个jar包,绝对你够用
commons-fileupload-1.4.jar
commons commons-fileupload历史版本jar包集合,包括src源码 附件列表: commons-fileupload-1.0.zip commons-fileupload-1.1.1.zip commons-fileupload-1.1.zip commons-fileupload-1.2.1-bin.zip commons-...
赠送jar包:commons-fileupload-1.3.1.jar; 赠送原API文档:commons-fileupload-1.3.1-javadoc.jar; 赠送源代码:commons-fileupload-1.3.1-sources.jar; 包含翻译后的API文档:commons-fileupload-1.3.1-...
commons-fileupload-1.3.3.jar和commons-io-2.6.jar最新版本
个人使用common-fileupload1.2.2和io-1.3.2时总结
Common-FileUpload带进度条文件上传
包括commons所有的18个工具包: validator、pool、beanutil、logging、dbcp、collections、codec、digester、discover、email、fileupload、httpclient、jelly、jxpath、lang、modeler、net
Struts2拦截器学习.doc Common-FileUpload实现文件上传.doc 写得很好
commons-fileupload-1.2.1-bin commons-fileupload 文件上传 commons-fileupload-1.2.1-bin commons-fileupload 文件上传 jar包 及相关文档
commons-fileupload-1.2.2.jar和commons-io.jar,用于java开发。
使用commons-fileupload上传文件 使用commons-fileupload上传文件
common-FileUpload.jar
commons-fileupload-1.3.1.jar