Java RESTful вопрос загрузки файла - PullRequest
1 голос
/ 19 июля 2011

Сейчас я изучаю REST и Spring, и мне нужно сделать какой-нибудь стартовый проект, чтобы привыкнуть к технологиям. Итак, я сделал приложение RESTful после нескольких уроков, и у меня возникли проблемы с загрузкой файлов в службу.

Когда я нажимаю на опцию «Запускать на сервере» в eclipse в контекстном меню FileUpload.html, это дает мне HTTP-статус 404 - Не найдено. Я запускаю HTML-файл, и он не может найти его. Я не понимаю почему. Я должен сказать, что другие действия, такие как @GET, работают правильно. Поэтому, когда я получаю доступ из браузера к какому-либо адресу для метода GET, он работает. Так что если кто-то что-то знает, пожалуйста, дайте мне знать, потому что я действительно не понимаю. Спасибо

Вот класс GalleryResource:

@Path("/locations")
public class GalleryResource {
    private GalleryService galleryService = new PicturesGalleryService();

    @POST
    @Path("/upload")
    @Consumes("multipart/form-data")
    public Response uploadFile(
            @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file") FormDataContentDisposition fileDetail) {

        String newFile= "c:/gallery/"
                + fileDetail.getFileName();

        FileUtiles.createNewPicture(newFile);

        String output = "File uploaded to : " + uploadedFileLocation;

        return Response.status(200).entity(output).build();

    }
}

Вот пример веб-страницы:

<html>
<body> 
    <form action="http://localhost:8080/locations/upload" method="post" enctype="multipart/form-data">

      <input type="file" name="file"/> 
      <input type="submit" value="Upload File" />
    </form> 
</body>
</html>

Вот дерево каталогов моего проекта:

enter image description here

Файл web.xml:

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Restful Web Application</display-name>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.rest.sample.resources</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

Файл .project:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="build/classes" path="src/main/java"/>
    <classpathentry kind="src" output="build/resource" path="src/main/resources"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="output" path="build/classes"/>
</classpath>

Файл .classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="build/classes" path="src/main/java"/>
    <classpathentry kind="src" output="build/resource" path="src/main/resources"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="output" path="build/classes"/>
</classpath>

Ответы [ 3 ]

0 голосов
/ 19 июля 2011

Вы уверены, что это:

http://localhost:8080/locations/upload

правильно?

И не должен включать имя вашего проекта перед путем к ресурсу, например:

http://localhost:8080/RESTservice/locations/upload

0 голосов
/ 20 июля 2011

Это весеннее веб-приложение?

Мне не хватает:

  • файл веб-конфигурации Spring (в большинстве случаев отдельный файл, но иногда включаемый в applicationContext.xml)
  • Часть файла web.xml, где настроен и запущен spring

Вы действительно пытались запустить сервер из файла HTML? - Я никогда не видел этот вариант раньше. - Я всегда добавляю приложение на Сервер и запускаю Сервер из представления «Сервер» (Eclipse Alt-3 + «Сервер»)

0 голосов
/ 19 июля 2011

Получаете ли вы запись в журнале о том, что она загрузила GalleryResource? Кроме того, если вы измените свой @Path ("/ location") на что-то уникальное из классов, использующих @GET, это сработает? Так что измените его на @Path ("/ locationUpload"). Ранее у меня были проблемы с несколькими файлами, использующими одну и ту же запись пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...