Загрузка файла с сервлетом Java приводит к тому, что ресурс не найден - PullRequest
0 голосов
/ 09 мая 2018

У меня есть источник, который, я думаю, должен работать, но по какой-то причине он дает мне ресурс, который не найден, и совершенно другой ресурс.

HTML часть, просто форма:

 <html lang="en">
<head>
    <title>File Uploader</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <form method="POST" action="upload" enctype="multipart/form-data" >
        File:
        <input type="file" name="file" id="file" />
        <input type="submit" value="Upload" name="upload" id="upload" />
    </form>
</body>
</html>

Java часть:

 import java.io.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 import javax.servlet.annotation.*;

 @WebServlet(name = "FileUploader", urlPatterns = "upload")
 @MultipartConfig
 public class FileUploader extends HttpServlet {

 private final static String serverPath = "/fileuploads";

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");

final Part filePart = request.getPart("file");
String fileName = getFileName(filePart);

OutputStream out = null;
InputStream filecontent = null;
final PrintWriter writer = response.getWriter();

try {
  out = new FileOutputStream(new File(serverPath + File.separator + fileName));
  filecontent = filePart.getInputStream();

  int read = 0;
  final byte[] bytes = new byte[1024];

  while ((read = filecontent.read(bytes)) != -1) {
    out.write(bytes, 0, read);
  }
  writer.println("New file " + fileName + " created at " + serverPath);

} catch (FileNotFoundException fne) {
  writer.println("Missing file or no insufficient permissions.");
  writer.println(" ERROR: " + fne.getMessage());
} finally {
  if (out != null) {
    out.close();
  }
  if (filecontent != null) {
    filecontent.close();
  }
  if (writer != null) {
    writer.close();
  }
}
}

private String getFileName(Part filePart) {
String header = filePart.getHeader("content-disposition");
String name = header.substring(header.indexOf("filename=\"")+10);
return name.substring(0, name.indexOf("\""));
}
}

Я ожидаю, что файл будет загружен в / proj / publ / fileuploads, но в инстаграме указано, что ресурс / proj / publ / uploads недоступен ....

Файлы находятся в папке / proj / publ /. Почему он всегда указывает на ту папку, которая не существует?

Спасибо за вашу помощь.

Viking

РЕДАКТИРОВАТЬ: Проблема решена ... по какой-то причине я создал файл Java в src, а не в WEB-INF / src ... поэтому возникла проблема.

Ответы [ 2 ]

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

В основном ресурс не найден, когда файл, который мы пытаемся запросить, не найден или путь к ресурсу отсутствует.

В вашем случае объявите urlPattern в аннотации webServlet следующим образом.

@ WebServlet (urlPatterns = "/ закачивать")

@ WebServlet [https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html]

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

Ресурс недоступен, поскольку сервлет не сопоставлен ни с одним шаблоном URL. Это можно сделать либо объявлением XML в /WebContent/WEB-INF/web.xml, либо аннотацией @ WebServlet .

Я вижу, что вы уже используете @WebServlet, поэтому вам нужно добавить элемент urlPatterns . Примерно так:

@WebServlet(urlPatterns = "upload", name="FileUploader")

Еще одна вещь, которую нужно решить - это атрибут действия формы. На основании контейнера сервлета и его конфигурации ресурс не будет доступен в корне контейнера. Обычно он имеет вид host: port / application-context / url-pattern , однако это не является строгим правилом. Чтобы избежать постоянных изменений, какой правильный URL вы можете использовать тег URL JSTL . Примерно так:

form method="POST" action="<c:url ='/upload' />" enctype="multipart/form-data" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...