Java GetParts()在servlet中返回null

Java GetParts()在servlet中返回null,java,file,web,servlets,jakarta-ee,Java,File,Web,Servlets,Jakarta Ee,大家好,我的代码遇到了一个问题,我有一个jsp表单可以将文件发送到servlet,当我尝试使用request.getParts()提取文件时,当我尝试将其打印到控制台时,它返回空值,有人能帮我吗。这是我的密码 我的jsp: <!DOCTYPE html> <html lang="en"> <head> <title>File Upload</title> <

大家好,我的代码遇到了一个问题,我有一个jsp表单可以将文件发送到servlet,当我尝试使用request.getParts()提取文件时,当我尝试将其打印到控制台时,它返回空值,有人能帮我吗。这是我的密码

我的jsp:

 <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>File Upload</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <body>
            <form method="POST" action="/PartsServlet" enctype="multipart/form-data" >
                File:
                <input type="file" name="file" id="file" /> <br/>
                Destination:
                <input type="text" value="/tmp" name="destination"/>
                </br>
                <input type="submit" value="Upload" name="upload" id="upload" />
            </form>
        </body>
    </html>
Add@MultipartConfig注释。
始终只解析一次请求正文并将其存储在列表中。
使一部分不能消耗它。
List fileParts=request.getParts().stream().filter(part->“file”.equals(part.getName())).collect(Collectors.toList());
对于(部分:文件部分){
}
文件上传=新文件(“/path/to/uploads”);
File File=File.createTempFile(“somefilename-”,“.ext”,上载);
try(InputStream input=part.getInputStream()){
复制(输入,file.toPath(),StandardCopyOption.REPLACE_EXISTING);
}
添加@MultipartConfig注释。
始终只解析一次请求正文并将其存储在列表中。
使一部分不能消耗它。
List fileParts=request.getParts().stream().filter(part->“file”.equals(part.getName())).collect(Collectors.toList());
对于(部分:文件部分){
}
文件上传=新文件(“/path/to/uploads”);
File File=File.createTempFile(“somefilename-”,“.ext”,上载);
try(InputStream input=part.getInputStream()){
复制(输入,file.toPath(),StandardCopyOption.REPLACE_EXISTING);
}

添加注释
@MultipartConfig
。添加注释
@MultipartConfig
。您知道如何将我的零件文件存储到新的目标中吗!谢谢你的快速回复。我已经编辑了我的答案。它显示了如何上传文件并将其存储在您的目的地。您知道如何将我的零件文件存储到新的目的地吗!谢谢你的快速回复。我已经编辑了我的答案。它显示了如何上传文件并将其存储到您的目的地。
package Servv;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class PartsServlet
 */
@WebServlet("/PartsServlet")
public class PartsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public PartsServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
        System.out.println("Get Parts "+request.getPart("file"));
        System.out.println("Get Parts "+request.getPart("destination"));
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
Add @MultipartConfig annotation.
Always parse your request body only once and store it in a list.    
so that one part cannot consume it.

 List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName())).collect(Collectors.toList());

    for (Part part : fileParts) { 

    }

File uploads = new File("/path/to/uploads");
File file = File.createTempFile("somefilename-", ".ext", uploads);

try (InputStream input = part.getInputStream()) {
    Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}