Ошибка при загрузке изображения с элементами формы - PullRequest
0 голосов
/ 15 мая 2018

Проблема:

Я пытаюсь загрузить изображение для регистрации пользователя.

Когда я загружаю изображение без какого-либо элемента формы внутри формы.Он будет работать правильно.

, но когда я пытаюсь загрузить изображение из элемента внутри формы, он выдаст мне ошибку, для получения дополнительной информации см. Предоставленный код и информацию об ошибке.

Форма дляЗарегистрировать пользователя:

            <form method="post" action="UploadServlet"
              enctype="multipart/form-data">
                 username:<input type="text" name="username">
                 password:<input type="password" name="password">
                 city:<input type="text" name="city">
                 State:<input type="text" name="state">
                 Email:<input type="text" name="email">
                 Select file to upload: <input type="file" name="file" size="60" />
                 <br />
                 <br /> 
                 <input type="submit" value="Upload" />
           </form>

Сервлет:

import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@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";

@Override
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    String appPath = request.getServletContext().getRealPath("");
    String savePath = appPath + File.separator + SAVE_DIR;
    File fileSaveDir = new File(savePath);
    if (!fileSaveDir.exists()) {
        fileSaveDir.mkdir();
    }

    for (Part part : request.getParts()) {
        String fileName = extractFileName(part);
        fileName = new File(fileName).getName();
        part.write(savePath + File.separator + fileName);
    }
    request.setAttribute("message", "Upload has been done successfully!");
    getServletContext().getRequestDispatcher("/userlist.jsp").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 "";
    }}

Ошибка:

java.io.IOException: java.io.FileNotFoundException: E:\New 
Folder\UploadServlet30\build\web\uploadFiles (Access is denied)
net.codejava.servlet.UploadServlet.doPost(UploadServlet.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.io.FileNotFoundException: E:\New 
Folder\UploadServlet30\build\web\uploadFiles (Access is denied)
java.io.FileOutputStream.open0(Native Method)
java.io.FileOutputStream.open(FileOutputStream.java:270)
java.io.FileOutputStream.<init>(FileOutputStream.java:213)
java.io.FileOutputStream.<init>(FileOutputStream.java:162)
org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.write(DiskFileItem. java:378)
net.codejava.servlet.UploadServlet.doPost(UploadServlet.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

1 Ответ

0 голосов
/ 15 мая 2018

в вашем методе doPost сервлета сначала получите все параметры с помощью request.getParameter ("inputname").

после этого вместо использования цикла foreach.только запись

    Part part = request.getPart("file");
    String fileName = extractFileName(part);
    part.write(savePath + File.separator + fileName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...