Bom dia.
Estou seguindo um tutorial para fazer upload de arquivos com Servlet, porém, ele somente consegue criar a pasta no local correto. No momento de fazer o upload do arquivo, ele acaba passando dois diretórios. O primeiro diretório é o Part e o segundo onde foi criada a pasta para armazenamento dos arquivos.
Segue o código:
@WebServlet(name = "UploadServlet", urlPatterns = {"/UploadServlet"})
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
maxFileSize = 1024 * 1024 * 10, // 10MB
maxRequestSize = 1024 * 1024 * 50) // 50MB
public class UploadServlet extends HttpServlet {
private static final String SAVE_DIR = "uploadFiles";
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Obtem o caminho absoluto da aplicação
String appPath = request.getServletContext().getRealPath("");
// Constrói o caminho do diretório para salvar o arquivo
String savePath = appPath + File.separator + SAVE_DIR;
// Cria diretório caso ele não exista
File fileSaveDir = new File(savePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}
// pelo que percebi, é aqui que ele pega o primeiro caminho
for (Part part : request.getParts()) {
String fileName = extractFileName(part);
part.write(fileName);
}
getServletContext().getRequestDispatcher("/success.html").forward(request, response);
}
private String extractFileName(Part part) {
String contentDisp = part.getHeader("content-disposition");
String[] items = contentDisp.split(";");
for (String s : items) {
if (s.trim().startsWith("filename")) {
return s.substring(s.indexOf("=") + 2, s.length() - 1);
}
}
return "";
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}