源码(一) - ServletFileUpload和FileUpload

一.概述

本类是用于处理文件上传的高级API。
2.multipart/mixed编码类型的html widget

二.类继承关系


三.类方法


四.ServletFileUpload源码

// 1.2.1
package org.apache.commons.fileupload.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;

/**
 * <p>用于处理文件上传的高级API</p>
 *
 * 本类处理由html widget发送的multipart/mixed编码类型、RFC 1867(http://www.ietf.org/rfc/rfc1867.txt)指定的多个文件
 * 使用parseRequest(HttpServletRequest)方法获取与给定的html widget相关联的org.apache.commons.fileupload.FileItem列表
 *
 * 上传文件是保存在内存,缓存到本地,还是其他地方,由DiskFileItemFactory决定
 */
public class ServletFileUpload extends FileUpload {
    /**
	 * 构造此类的未初始化实例
	 * 在尝试解析请求之前,必须调用setFileItemFactory(FileItemFactory factory)方法配置FileItemFactory
     */
    public ServletFileUpload() {
        super();
    }


    /**
	 * 构造本类的一个实例
	 * 本类用提供的factory去创建FileItem实例
     * @param fileItemFactory The factory to use for creating file items.
     */
    public ServletFileUpload(FileItemFactory fileItemFactory) {
        super(fileItemFactory);
    }
	
    /**
     * 确定请求是否包含多部分内容。可用来判断是否是文件上传请求
     *
     * @param request servlet请求对象,必须非空
     * @return true:文件上传请求
     */
    public static final boolean isMultipartContent(HttpServletRequest request) {
		// 文件上传一定是post请求
        if (!"post".equals(request.getMethod().toLowerCase())) {
            return false;
        }
        String contentType = request.getContentType();
        if (contentType == null) {
            return false;
        }
		// 文件上传内容类型一定以multipart/开头
        if (contentType.toLowerCase().startsWith(MULTIPART)) {
            return true;
        }
        return false;
    }

    /**
	 * 解析上传文件的multipart/form-data流,返回按照传输顺序解析出的FileItem实例列表
	 * http://www.ietf.org/rfc/rfc1867.txt RFC 1867
     *
     * @param request 被解析的servlet请求
     * @return 按照传输顺序,从请求中解析出的FileItem实例列表
     * @throws FileUploadException 如果读/解析请求或存储文件有问题。
     */
    public List /* FileItem */ parseRequest(HttpServletRequest request) throws FileUploadException {
        return parseRequest(new ServletRequestContext(request));
    }


    /**
     * 解析上传文件的multipart/form-data流,返回按照传输顺序解析出的FileItemStream实例迭代器
     *
     * @param request 被解析的servlet请求
     * @return 按照传输顺序,从请求中解析出的FileItemStream实例迭代器
     * @throws FileUploadException 如果读/解析请求或存储文件有问题
     * @throws IOException 发生I/O错误。 这可能是与客户端通信时的网络错误或存储上传的内容时出现的问题
     */
    public FileItemIterator getItemIterator(HttpServletRequest request) throws FileUploadException, IOException {
        return super.getItemIterator(new ServletRequestContext(request));
    }
}

五.FileUpload源码

package org.apache.commons.fileupload;

public class FileUpload extends FileUploadBase {
    // 用于创建FileItem的工厂
    private FileItemFactory fileItemFactory;

    /**
	 * 构造此类的未初始化实例
	 * 一个FileItemFactory必须被配置,在解析请求之前用过调用setFileItemFactory方法配置
     */
    public FileUpload() {
        super();
    }

    /**
     * 使用给定的fileItemFactory构造此类的实例
     */
    public FileUpload(FileItemFactory fileItemFactory) {
        super();
        this.fileItemFactory = fileItemFactory;
    }

    /**
     * Returns the factory class used when creating file items.
     */
    public FileItemFactory getFileItemFactory() {
        return fileItemFactory;
    }

    /**
     * Sets the factory class to use when creating file items.
     *
     * @param factory The factory class for new file items.
     */
    public void setFileItemFactory(FileItemFactory factory) {
        this.fileItemFactory = factory;
    }
}

六.ServletFileUpload实例

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(MaxMemorySize);
factory.setRepository(TempDirectory);

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Set overall request size constraint
upload.setSizeMax(yourMaxRequestSize);

// Parse the request
List<FileItem> items = upload.parseRequest(request);


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: commons-fileupload-1.4.jar 是一个 Java 库,用于处理文件上传功能。它提供了一组 API,可以方便地将文件上传到服务器端,并对上传的文件进行处理和管理。这个库可以被广泛地应用于 Web 应用程序中,例如上传图片、上传文件等功能。 ### 回答2: commons-fileupload-1.4.jar是一个Java开源库,用于帮助开发者处理文件上传的功能。它提供了一些方便的方法和,使开发者能够轻松地处理文件上传的细节和逻辑。 commons-fileupload-1.4.jar具有以下特点和功能: 1. 上传文件的大小限制:开发者可以通过设置最大文件大小的限制,确保上传的文件不会超过设定的大小。这对于避免服务器负荷过大和防止恶意上传非常有用。 2. 文件上传进度监控:commons-fileupload-1.4.jar允许开发者监控文件上传的进度,从而在前端页面上显示上传的进度条或百分比。这有助于提升用户体验和提供实时的反馈。 3. 多文件上传支持:库中提供了上传多个文件的方法,使得同时上传多个文件变得简单。这对于需要批量上传文件的功能非常有用。 4. 文件上传的错误处理:开发者可以通过捕获异常和处理错误,来应对上传文件过程中的各种问题,比如文件格式错误、文件大小超过限制等。 5. 高性能和稳定性:commons-fileupload-1.4.jar经过了多次更新和改进,它是经过充分测试和广泛应用的稳定版本。这保证了它的高性能和可靠性,可以满足大多数文件上传的需求。 总而言之,commons-fileupload-1.4.jar是一个功能强大的文件上传处理库,使得开发者能够快速、方便地实现文件上传功能。它具有高性能和稳定性,提供了丰富的功能和错误处理机制。无论是在Web开发或其他领域中,它都是一个非常实用的工具。 ### 回答3: commons-fileupload-1.4.jar是一个Java库,用于处理文件上传功能。它是Apache Commons项目的一部分,旨在简化开发人员在Web应用程序中处理文件上传的任务。 该库提供了一个简单而强大的API,可以轻松地将用户通过Web表单上传的文件保存到服务器上的指定位置。它支持处理单个文件上传以及多个文件上传,并提供了对文件上传进度的监控和管理的功能。 commons-fileupload-1.4.jar还提供了一些方便的和方法,用于解析传入的请求,从中提取上传的文件信息,并对文件进行处理。它支持多种文件上传的特性,如限制文件大小、限制文件型、自动清理临时文件等。 使用commons-fileupload-1.4.jar非常简单。首先,将该库添加到项目的构建路径中。然后,通过创建一个DiskFileItemFactory对象来配置文件上传的一些参数,例如临时文件存储路径、内存阈值等。接下来,创建一个ServletFileUpload对象,并使用它解析请求,得到文件项的列表。最后,遍历文件项列表,将每个文件保存到服务器上的指定位置。 总之,commons-fileupload-1.4.jar提供了一个方便、高效的解决方案,用于处理文件上传功能。无论是小型网站还是大型Web应用程序,它都是一个非常有用的工具,可以帮助开发人员轻松处理文件上传的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值