使用 Java Servlet 从单个参数获取多个部分

问题描述 投票:0回答:1

是否可以从单个标签获取多个文件?

目前我正在使用单个输入将所有文件发送到 Servlet,使用如下输入标签:

request.getPart("file")
//仅返回添加到输入的第一个值。
request.getParts()
//返回jsp页面上的每个输入值。 我怎样才能做到这一点?

java html jsp web servlets
1个回答
0
投票

是的,通过在 HTML 中使用

<input>
属性并在 Servlet 中处理文件上传,可以从单个
multiple
标签获取多个文件。具体方法如下:

HTML

首先,修改您的 HTML 表单以允许上传多个文件:

<form action="yourServletURL" method="post" enctype="multipart/form-data">
    <input type="file" name="file" multiple>
    <button type="submit">Upload</button>
</form>

Servlet

在您的 Servlet 中,使用

request.getParts()
方法检索所有上传的文件:

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;

@WebServlet("/yourServletURL")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Collection<Part> parts = request.getParts();
        
        for (Part part : parts) {
            if (part.getName().equals("file")) {
                String fileName = part.getSubmittedFileName();
                InputStream fileContent = part.getInputStream();
                
                // Handle the file content (e.g., save to disk, process it, etc.)
                // Example:
                // Files.copy(fileContent, new File("yourUploadDirectory" + File.separator + fileName).toPath());
            }
        }

        // Send response back to the client
        response.getWriter().println("Files uploaded successfully!");
    }
}

说明

  1. HTML 表单
    multiple
    标签中的
    <input>
    属性允许用户选择多个文件。
  2. Servlet 注解
    @MultipartConfig
    注解指定 Servlet 将处理多部分/表单数据请求。
  3. 检索部分
    request.getParts()
    方法检索多部分请求的所有部分。每个
    Part
    代表一个文件。
  4. 处理每个文件:循环遍历各个部分并检查部分名称是否为“file”。然后,获取文件名和内容进行相应处理。

通过此设置,您应该能够从单个输入标签上传多个文件并在 Servlet 中处理它们。

© www.soinside.com 2019 - 2024. All rights reserved.