是否可以从单个标签获取多个文件?
目前我正在使用单个输入将所有文件发送到 Servlet,使用如下输入标签:
request.getPart("file")
//仅返回添加到输入的第一个值。
request.getParts()
//返回jsp页面上的每个输入值。
我怎样才能做到这一点?
是的,通过在 HTML 中使用
<input>
属性并在 Servlet 中处理文件上传,可以从单个 multiple
标签获取多个文件。具体方法如下:
首先,修改您的 HTML 表单以允许上传多个文件:
<form action="yourServletURL" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple>
<button type="submit">Upload</button>
</form>
在您的 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!");
}
}
multiple
标签中的<input>
属性允许用户选择多个文件。@MultipartConfig
注解指定 Servlet 将处理多部分/表单数据请求。request.getParts()
方法检索多部分请求的所有部分。每个 Part
代表一个文件。通过此设置,您应该能够从单个输入标签上传多个文件并在 Servlet 中处理它们。