Java 文件上传

1. 简介

Java 文件上传是指将文件从客户端上传到服务器的过程。在 Java 中,可以使用多种方式实现文件上传,比如使用 Servlet、Spring MVC 或者 Apache Commons FileUpload 等框架。

本文将以使用 Servlet 进行文件上传为例,给你介绍整个文件上传的流程,并给出相应的代码示例和注释。

2. 文件上传流程

下面是文件上传的整个流程,可以使用表格展示:

步骤 描述
1. 创建 HTML 表单 创建一个 HTML 表单,用于选择文件并触发文件上传请求
2. 处理上传请求 在服务器端接收上传请求,并解析请求的内容
3. 检验上传文件 对上传的文件进行校验,包括文件类型、大小等
4. 保存上传文件 将上传的文件保存到指定的目录中
5. 返回响应 返回上传结果给客户端,可以是成功或失败的信息

3. 代码实现

3.1 创建 HTML 表单

首先,我们需要创建一个 HTML 表单,用于选择要上传的文件。以下是一个简单的表单示例:

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

3.2 处理上传请求

在服务器端,我们需要编写一个 Servlet 来处理上传请求。以下是一个简单的 Servlet 示例:

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传的文件
        Part filePart = request.getPart("file");
        
        // 获取文件名
        String fileName = getSubmittedFileName(filePart);
        
        // 保存文件到指定目录
        String savePath = "/path/to/save";
        File file = new File(savePath, fileName);
        filePart.write(file.getAbsolutePath());
        
        // 返回上传结果
        response.getWriter().println("文件上传成功");
    }
    
    private String getSubmittedFileName(Part part) {
        String contentDisposition = part.getHeader("content-disposition");
        String[] parts = contentDisposition.split(";");
        for (String part : parts) {
            if (part.trim().startsWith("filename")) {
                return part.substring(part.indexOf('=') + 1).trim().replace("\"", "");
            }
        }
        return null;
    }
}

3.3 检验上传文件

在处理上传请求后,我们需要对上传的文件进行校验,以确保文件的合法性和安全性。以下是一个示例代码:

// 获取上传的文件类型
String contentType = filePart.getContentType();

// 判断文件类型是否符合要求
if (!contentType.equals("image/jpeg")) {
    response.getWriter().println("只能上传 JPEG 图片");
    return;
}

// 获取上传的文件大小
long fileSize = filePart.getSize();

// 判断文件大小是否符合要求
if (fileSize > 10 * 1024 * 1024) {
    response.getWriter().println("文件大小不能超过 10MB");
    return;
}

3.4 保存上传文件

在校验通过后,我们将上传的文件保存到指定的目录中。以下是一个示例代码:

String savePath = "/path/to/save";
File file = new File(savePath, fileName);
filePart.write(file.getAbsolutePath());

3.5 返回响应

最后,我们需要返回上传结果给客户端。以下是一个示例代码:

response.getWriter().println("文件上传成功");

4. 总结

通过本文的介绍,你应该已经了解了如何使用 Servlet 实现 Java 文件上传。整个流程包括创建 HTML 表单、处理上传请求、检验上传文件、保存上传文件和返回响应。

请根据实际需求修改代码中的路径和文件类型等参数,并确保服务器有足够的权限来保存上传的文件。

希望本文对你有帮助,祝你在文件上传方面取得成功!