Ошибка в ServletFileUpload#parseRequest(запрос) с tomcat 10

Работаем над простой программой для загрузки файлов. Мне пришлось использовать классы jakarta.servlet. *, Поскольку я использую Tomcat v10. Я получаю ошибку времени компиляции в строке parseRequest (request).

Код:

      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        ServletFileUpload sf = new ServletFileUpload(new DiskFileItemFactory());
        try {
            List<FileItem> multifiles = sf.parseRequest(request);
            
            for(FileItem i : multifiles) {
                i.write(new File("C:/Users/Luffy/Documents/FileUploadDemo/"+i.getName()));
            }
            response.getWriter().print("The file is uploaded");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        response.getWriter().print("The file is uploaded");
    }

Ошибка выглядит следующим образом:

Метод parseRequest (javax.servlet.http.HttpServletRequest) в типе ServletFileUpload неприменим для аргументов (jakarta.servlet.http.HttpServletRequest)

Я много искал в Google, но не нашел решения.

Предложите обходной путь или возможное решение. Заранее спасибо.

Это мой первый пост в Stack overflow. Так что игнорируйте мои ошибки, если они есть :)

2 ответа

Вы пытаетесь использовать ServletFileUpload класс от commons-fileupload, который не работает с jakarta.servlet.http.HttpServletRequest. Библиотека должна быть адаптирована для работы с классами Servlet 5.0.

К счастью, поскольку Servlet 3.0 (Tomcat 8.0) multipart/form-dataзапросы могут быть проанализированы сервлетом. Вам просто необходимо:

      try {
    final Collection<Part> parts = request.getParts();
    for (final Part part : parts) {
       part.write("C:/Users/Luffy/Documents/FileUploadDemo/"+part.getSubmittedFileName());
    }
    response.getWriter().print("The file has been uploaded successfully.");
} catch (Exception e) {
    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Upload failed.");
}

protected void doPost(запрос HttpServletRequest, ответ HttpServletResponse) выдает ServletException, IOException {

          try {
        Collection<Part> parts = request.getParts();
        for (Part part : parts) {
            System.out.println(part.getSubmittedFileName());
            part.write("c:/images/"+part.getSubmittedFileName());
        }
        
        response.getWriter().print("The file has been uploaded successfully.");
    } catch (Exception e) {
        response.sendError(response.SC_INTERNAL_SERVER_ERROR, "Upload failed.");
    }
    
}

Я также реализую это, он работает отлично.

Другие вопросы по тегам