comm-fileupload教程
FileUpload获取表单中参数的方法并对该组件做了进一点封装,使其更容易使用,并支持单文件上传和多文件上传两种方式,首先定义一个基类放置公共属性: FileUploadBase.java import java.io.File; import java.util.HashMap; import java.util.Map; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; public abstract class FileUploadBase { protected Map<String, String> parameters = new HashMap<String, String>();// 保存普通form表单域 protected String encoding = "utf-8"; // 字符编码,当读取上传表单的各部分时会用到该encoding protected UploadFileFilter filter = null; // 文件过滤器, 默认为NULL 不过滤 /** * 设置内存中缓存大小。 */ protected int sizeThreshold = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD; /** * The maximum size permitted for the complete request, as opposed to *{@link #fileSizeMax}. A value of -1 indicates no maximum.* */ protected long sizeMax = -1; /** * 在sizeThreshold超出缓存区时临时保存的文件目录 */ protected File repository; public String getParameter(String key) { return parameters.get(key); } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } /** * 获取上传文件最大的大小,单位为Byte(字节),为-1时表示无限制 * @return */ public long getSizeMax() { return sizeMax; } /** * 设置上传文件最大的大小,单位为Byte(字节),为-1时表示无限制 * @param sizeMax */ public void setSizeMax(long sizeMax) { this.sizeMax = sizeMax; } public int getSizeThreshold() { return sizeThreshold; } public void setSizeThreshold(int sizeThreshold) { this.sizeThreshold = sizeThreshold; } /** * Returns the directory used to temporarily store files that are larger * than the configured size threshold. * * @return The directory in which temporary files will be located. * * @see #setRepository(java.io.File) * */ public File getRepository() { return repository; } /** * Sets the directory used to temporarily store files that are larger than * the configured size threshold. * * @param repository * The directory in which temporary files will be located. * * @see #getRepository() * */ public void setRepository(File repository) { this.repository = repository; } /** * 获取参数列表 * @return */ public Map<String, String> getParameters() { return parameters; } /** * 获取过滤器 * @return */ public UploadFileFilter getFilter() { return filter; } /** * 设置文件过滤器,不符合过滤器规则的将不被上传 * @param filter */ public void setFilter(UploadFileFilter filter) { this.filter = filter; } /** * 验证文件是否有效 * @param item * @return */ protected boolean isValidFile(FileItem item){ return item == null || item.getName() == "" || item.getSize() == 0 || (filter != null && !filter.accept(item.getName())) ? false : true; } } 【Apache Commons FileUpload 教程】 Apache Commons FileUpload 是一个用于处理 HTTP 协议中文件上传功能的 Java 库。这个库使得从 HTML 表单接收多个文件变得简单且易于管理。在这个教程中,我们将专注于如何使用 `comm-fileupload` 来实现文件上传功能。 1. **基本概念** - **FileUploadBase.java**: 这是教程中提到的一个抽象基类,它封装了 Apache Commons FileUpload 的核心功能,并提供了设置和获取上传参数、文件过滤以及大小限制的方法。 - **FileItem**: 这是 Apache Commons FileUpload 提供的接口,代表了上传的一个文件或表单字段。它包含了文件名、内容、大小等信息。 - **DiskFileItemFactory**: 这个类用于创建 `FileItem` 实例,并控制文件在内存或磁盘上的存储策略。 2. **核心属性** - `parameters`: 用于保存普通表单字段的键值对。 - `encoding`: 设置字符编码,处理上传表单中的文本字段。 - `filter`: 文件过滤器,可以指定允许上传的文件类型。 - `sizeThreshold`: 内存中缓存的大小阈值,超过此阈值,文件将被写入磁盘。 - `sizeMax`: 允许的最大请求大小,用于限制整个请求的大小。 - `repository`: 当文件大小超过 `sizeThreshold` 时,临时保存文件的目录。 3. **方法详解** - `getParameter(String key)`: 返回指定表单字段的值。 - `getEncoding() / setEncoding(String encoding)`: 获取和设置字符编码。 - `getSizeMax() / setSizeMax(long sizeMax)`: 获取和设置最大文件大小。 - `getSizeThreshold() / setSizeThreshold(int sizeThreshold)`: 获取和设置内存缓存阈值。 - `getRepository() / setRepository(File repository)`: 获取和设置临时文件存储目录。 - `isValidFile(FileItem item)`: 验证文件是否有效,根据过滤器和大小限制进行检查。 4. **使用步骤** - 下载 Apache Commons FileUpload 最新版本:访问 `http://jakarta.apache.org/commons/fileupload/`。 - 创建一个 `Servlet` 或其他处理上传请求的类,继承自 `FileUploadBase`。 - 初始化 `DiskFileItemFactory` 并设置参数如 `sizeThreshold` 和 `repository`。 - 使用 `ServletFileUpload` 处理请求,解析表单数据并获取 `FileItem` 对象。 - 检查每个 `FileItem` 是否为文件(不是普通表单字段)。 - 对于文件 `FileItem`,验证有效性(通过 `isValidFile()` 方法)并处理上传(例如移动到服务器上的目标位置)。 5. **多文件上传与单文件上传** - 单文件上传:只需处理一个 `FileItem` 对象即可。 - 多文件上传:在解析后,将得到一个 `FileItem` 的集合,需遍历并分别处理每个文件。 6. **安全性与最佳实践** - 总是设定大小限制,避免拒绝服务攻击。 - 使用过滤器限制可上传的文件类型,防止恶意文件上传。 - 存储上传文件时确保路径安全,避免路径遍历漏洞。 - 对上传的文件进行病毒扫描。 总结,Apache Commons FileUpload 通过提供 `FileUploadBase` 类,简化了 Java 中处理文件上传的流程,使得开发者可以方便地控制文件上传的大小、编码、过滤等关键环节。通过这个教程,你可以快速掌握文件上传的核心技术,从而在实际项目中灵活应用。
剩余8页未读,继续阅读
- 其实、我是个演员2014-08-15可用,谢谢分享
- chsinfo2012-04-18以前用的是smartUploadFile,后来发现,那个组织已经停止源码的更新了,主要问题是中文乱码没有解决,下载了这个试了下,简单方便,上传和下载都没有乱码!不错。
- 粉丝: 8
- 资源: 61
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助