记得很早之前在直接采用流读取上传文件时遇到如果上传是压缩文件就会被破坏,同时也会有不能获取上传表单中的其他域的值的问题。最近又涉及到上传的需求,对使用的上传组件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表单域。当然如果文件上传不满三个也会抛出异常
分享到:
相关推荐
### Common-fileupload组件实现文件上传 #### 一、概述 在现代Web开发中,文件上传是一项常见的需求。尤其是在Java Web应用程序中,实现文件上传功能变得越来越简单,这得益于丰富的开源库支持。Common-fileupload...
总结一下,Apache Commons FileUpload和Struts2框架提供了完善的文件上传解决方案。开发者可以通过Struts2的配置和Action类设计,结合Commons FileUpload的多部分解析能力,实现高效且安全的文件上传功能。同时,...
总的来说,Apache Commons FileUpload 和 Commons IO 是处理 Java Web 应用中文件上传和管理的重要工具,它们简化了原本复杂的多部分数据解析和文件操作,提高了开发效率和代码的可读性。在实际应用中,应根据需求...
Apache Commons FileUpload 是一款非常实用且功能强大的文件上传组件,广泛应用于Java Web项目中。它极大地简化了原本复杂繁琐的文件上传过程,使得开发者能够更加专注于业务逻辑的实现。本文档旨在通过详细解读...
"Common Fileupload上传组件包"是一个专用于处理Web应用程序中文件上传功能的工具包。这个包包含两个核心组件:`commons-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。这两个组件在实现文件上传过程中扮演着至关...
总结来说,"apache-common-uploadfile"是一个解决Java Servlet环境中文件上传问题的库,它提供了高效且灵活的解决方案,使得开发者能够方便地处理用户上传的各种文件。在Web开发中,掌握Apache Commons FileUpload的...
Apache Commons FileUpload 是一款广泛使用的文件上传组件,它简化了文件上传的处理流程,使开发者能够轻松地处理客户端发送过来的文件。本节将详细介绍如何准备实验环境以便使用此组件。 #### 三、实验环境准备 ...
我们使用了 Apache 的 common-fileupload 上传组件来实现文件上传功能,并使用 HttpServletResponse 的输出流来实现文件下载功能。通过本文的学习,读者可以了解 JavaWeb 中文件上传和下载的实现原理和方法。
总结起来,Apache Commons IO 和 Commons Fileupload 提供了强大的文件和流处理能力,使得Java开发者能够更高效地处理I/O任务。通过研究源码,我们可以学习到更多关于文件操作和网络请求处理的最佳实践。这两个组件...
本篇文章将重点解析文件上传的实现,采用Apache的开源工具`common-fileupload`组件来简化这一过程。 首先,我们需要搭建开发环境。创建一个新的JavaWeb项目`FileUploadAndDownLoad`,并引入`common-fileupload`和`...
2. **Apache Commons FileUpload**:提供处理文件上传的工具,包括common-fileupload.jar和common-io.jar。 3. **JSTL(JavaServer Pages Standard Tag Library)**:有时用于简化JSP页面的代码,尤其是处理表单和...
- **文件删除问题**:在处理完毕后,如果没有使用`common-fileupload.jar`等库中的删除方法,可能会导致临时文件未被正确清理。需要注意的是,即使没有显式调用删除方法,通常操作系统也会在文件句柄关闭后清理这些...
首先,文件上传的核心依赖于两个Java库,即`common-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。`Commons IO`库提供了一系列与输入/输出操作相关的工具类,而`Commons FileUpload`则专门用于处理HTTP请求中的多...
作者了解到common-fileUpload能更好地处理中文乱码。 7. **前后端交互**: - 在后台设置的属性要传递到前端显示,通过隐藏字段(hidden input)作为中介,然后通过JavaScript的getElementById获取并显示,展示了...
在给定的描述中,可以看到使用了`commons-fileupload`, `commons-io`, 和 `commons-codec`来处理文件上传,以及`jersey-client`, `jersey-core`, 和 `jersey-common`来实现跨服务器通信。这些依赖提供了处理文件上传...
- `common-fileupload-1.2.1.jar`:文件上传功能支持。 - `common-io-1.3.2.jar`:IO操作支持。 #### 2. 配置`web.xml` 为了使Struts2框架能够正常工作,还需要在`web.xml`中添加过滤器配置,示例如下: ```xml ...
总结,Apache Commons Upload为Java Web开发者提供了强大的文件上传功能,简化了处理多部分表单数据的过程。通过合理的配置和编程,我们可以构建安全、高效的文件上传系统。在实际开发中,结合其他框架和工具,如...
总结,ASPX上传图片涉及前端与后端的结合,包括前端样式设计、文件上传控件的使用,以及服务器端的文件处理、图片处理、数据库操作和安全性措施。了解并掌握这些知识点是开发高效、安全的图片上传功能的基础。
该自定义Web上传控件名为`fileupload`,位于`yingnet.common`命名空间下。它继承自`System.Web.UI.WebControls.WebControl`类,并且在设计时具有一个图标`"fileupload.bmp"`,默认属性为"text",默认事件为"click"。...