4

Java Web アプリケーションを Spring フレームワークに変換していますが、ファイルのアップロードで直面している問題についてアドバイスをいただければ幸いです。元のコードは、org.apache.commons.fileupload を使用して作成されました。

  1. Spring MultipartFile は org.apache.commons.fileupload をラップしますか、またはこの依存関係を POM ファイルから除外できますか?

  2. 私は次の例を見てきました:

    @RequestMapping(value = "/form", method = RequestMethod.POST)
    public String handleFormUpload(@RequestParam("file") MultipartFile file) {
    
        if (!file.isEmpty()) {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
           return "redirect:uploadSuccess";
        } else {
            return "redirect:uploadFailure";
        }
    }
    

    もともと私はこの例に従おうとしましたが、このリクエストパラメーターが見つからなかったため、常にエラーが発生していました。したがって、コントローラーで次のことを行いました。

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public @ResponseBody
    ExtResponse upload(HttpServletRequest request, HttpServletResponse response)
    {
       // Create a JSON response object.
       ExtResponse extResponse = new ExtResponse();
       try {
           if (request instanceof MultipartHttpServletRequest)
           {
               MultipartHttpServletRequest multipartRequest =
                            (MultipartHttpServletRequest) request;
               MultipartFile file = multipartRequest.getFiles("file");
               InputStream input = file.getInputStream();
               // do the input processing
               extResponse.setSuccess(true);
            }
        } catch (Exception e) {
            extResponse.setSuccess(false);
            extResponse.setMessage(e.getMessage());
        }
        return extResponse;
    }
    

そしてそれは働いています。@RequestParam が機能しなかった理由を誰かが教えてくれれば、感謝します。ところで私は持っています

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

私のサーブレットコンテキストファイルで。

4

6 に答える 6

2
  1. springはcommons-fileuploadに依存しないため、必要になります。そこにない場合、スプリングはその内部メカニズムを使用します
  2. MultipartFileメソッドパラメータとしてではなく、を渡す必要があります@RequestParam(..)
于 2012-05-10T10:52:51.343 に答える
1

これは私にとってはうまくいきます。

@RequestMapping(value = "upload.spr", method = RequestMethod.POST)
public ModelAndView upload(@RequestParam("file") MultipartFile file, HttpServletResponse response)
{
    //  handle file here
}
于 2013-01-10T15:25:19.160 に答える
0

リクエストパラメータの一般的なシステムはこの@RequestParam(value = "Your value"、required = true)であり、リクエストパラメータに対するモードはURLから値を取得するために使用されます。

于 2012-05-10T06:00:07.440 に答える
0

POST では、(@RequestParams を使用する) URL ではなく、リクエスト本文でパラメーターのみを送信します。

それがあなたの2番目の方法がうまくいった理由です。

于 2014-11-14T22:19:58.760 に答える
0

Spring MVC 3.2 では、Servet 3.0 のサポートが導入されました。そのため、以前のバージョンの Spring を使用している場合は、commons-file のアップロードを含める必要があります。

于 2014-11-14T22:50:08.283 に答える