4

REST サービスを使用して、html と Spring 3.0.6 で簡単なアップロードを設定しようとしています。オンラインのチュートリアルに従いましたが、MultipartFile パラメーターは常に null です。構成とコードは次のとおりです。

アプリケーションコンテキスト.xml:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="2000000"/>
</bean>

pom.xml:

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.1</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.2.2</version>
</dependency>

html:

<html>
    <head>
        <title>Upload a file please</title>
    </head>
    <body>
        <h1>Please upload a file</h1>
        <form method="post" action="/site/restServices/artworkUpload/" enctype="multipart/form-data">
            <input type="text" name="name"/>
            <input type="file" name="file"/>
            <input type="submit"/>
        </form>
    </body>
</html>

REST コントローラー:

@POST
@Path("/artworkUpload")
public String uploadFile(@RequestParam("name") String name,
    @RequestParam("file") MultipartFile file) {
    try {
        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
            return "redirect:uploadSuccess";
        } else {
            return "redirect:uploadFailure";
        }
    }
    catch (Exception ex)
    {

    }
    return null;
}

Spring のチュートリアルから例をコピーしましたが、何を変更しても、file パラメーターは常に null です。「名前」はテキスト ボックスに値を持ちますが、ファイルは null になります。

Jersey も使用してみましたが、ファイルの InputStream を受け取りましたが、 FormDataContentDisposition が null であるため、ファイルの種類を特定できません。

これはJettyでも実行されています。

私は何が欠けていますか?

4

2 に答える 2

4

私が覚えているように、ビルドパスに追加のライブラリを配置することで同じ問題を解決しました:

commons-fileupload-1.2.2.jar
commons-io-2.1.jar

これがお役に立てば幸いです。

編集。

Ok。やっとこの問題に取り組む時間ができました。まず、残りのサービス (アノテーション @POST、@Path) を構築するために標準的な Java 機能を使用するのはなぜですか? Spring では、REST に Spring MVC フューチャーを使用する方がよいためです。これについては、インターネット上に多くの情報があります。これは、リファレンス ドキュメントの特別な部分 です。IBMサイトの良い記事もここにあります。また、Spring MVC を使用して REST コントローラーを構築する方法についての非常に優れた説明は、Spring in Action (last 3-d edition)にあります。

ここでは、単純なファイル アップロード機能をどのように実装したかを示します。

残りのコントローラー:

@Controller
@RequestMapping("/rest/files")
public class FilesController {
        ...

        @RequestMapping(value="/rest/files", method=RequestMethod.POST)
        public String uploadFile(@RequestParam("name") String name,
                @RequestParam("file") MultipartFile file) {
            try {
                if (!file.isEmpty()) {
                    byte[] bytes = file.getBytes();
                    // store the bytes somewhere
                    return "redirect:uploadSuccess";
                } else {
                    return "redirect:uploadFailure";
                }
            }
            catch (Exception ex)
            {

            }
            return "/testFileDownload";
        }
}

html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test file upload</title>
</head>
<body>
    <h1>Please upload a file</h1>
    <form method="post" action="rest/files" enctype="multipart/form-data">
        <input type="text" name="name" /> <input type="file" name="file" /> <input
            type="submit" />
    </form>
</body>
</html>

dispatcher-servlet.xml でリゾルバー構成を表示します。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
            <map>
                <entry key="file" value="multipart/form-data"/>
                <entry key="html" value="text/html"/>
            </map>
        </property>
        <property name="viewResolvers">
            <list>
                <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/views/"/>
                    <property name="suffix" value=".jsp"/>
                </bean>
            </list>
        </property>
    </bean>

時間を無駄にしないことを願っています。これはまだあなたにとって必要です。)

編集2

Spring 3.1でRESTful Webサービスを構築する方法を説明した非常に優れたチュートリアルです。

于 2012-07-06T10:05:06.210 に答える
1

このライブラリを接続するのに役立ちました:

 <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

すべてのライブラリ:

<dependencies>
    <!-- Spring 3 MVC  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    <!-- Apache Commons file upload  -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>
    <!-- Apache Commons IO -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- JSTL for c: tag -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

http://viralpatel.net/blogs/spring-mvc-multiple-file-upload-example/を参照してください。

于 2013-08-14T09:43:40.583 に答える