Servlet中如何处理文件上传?代码示例讲解

Servlet可以通过HttpServletRequest对象获取HTTP请求中的文件数据。具体步骤如下:

1、在HTML表单中,设置form的enctype属性为multipart/form-data,这样浏览器会以二进制形式编码数据,并将数据分割成多个部分,其中每个部分都包含了一个文件的一部分数据和文件的元数据。
2、使用HttpServletRequest对象获取HTTP请求,可以通过request.getInputStream()获取请求流,通过request.getHeader()获取请求头信息,通过request.getParameter()获取请求参数。
3、使用ServletFileUpload类解析HTTP请求,该类可以将multipart/form-data请求流转换为文件和参数,并将它们封装到FileItem对象中。
4、使用FileItem对象将文件写入服务器的磁盘中。

示例代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if (isMultipart) {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            List<FileItem> items = upload.parseRequest(request);
            for (FileItem item : items) {
                if (item.isFormField()) {
                    // 处理表单域
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    // ...
                } else {
                    // 处理文件域
                    String fieldName = item.getFieldName();
                    String fileName = item.getName();
                    String contentType = item.getContentType();
                    long sizeInBytes = item.getSize();
                    // ...
                    File uploadedFile = new File("path/to/save/" + fileName);
                    item.write(uploadedFile);
                }
            }
        } catch (Exception e) {
            // 处理异常
        }
    }
}