【问题标题】:Spring REST MultipartFile file is always null when do upload file上传文件时,Spring REST MultipartFile 文件始终为空
【发布时间】:2016-03-01 14:21:47
【问题描述】:
@RequestMapping(value = "{fileName:.+}", method = RequestMethod.POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<ResponseEnvelope<String>> uploadFile(
         @RequestParam("ownerId") Long ownerId, 
         @PathVariable("fileName") String fileName,
         @RequestBody MultipartFile file)
         throws Exception {
    ResponseEnvelope<String> env;
    if(null == certFileContent) {
        env = new ResponseEnvelope<String>("fail");
        return new ResponseEntity<ResponseEnvelope<String>>(env, HttpStatus.OK);
    }
    service.uploadCertificate(ownerId, fileName, certFileContent.getBytes());
    env = new ResponseEnvelope<String>("success");
    return new ResponseEntity<ResponseEnvelope<String>>(env, HttpStatus.OK);
}

为什么我总是得到文件值为空,我已经配置了多部分支持,见下文,

【问题讨论】:

  • 您是否还在您的 HTML &lt;form /&gt; 标签上添加了enctype="multipart/form-data"(参见w3.org/TR/html401/interact/forms.html#h-17.13.4.2)?
  • 我用Rest客户端做测试,content-typem也选择了“multipart/form-data”,谢谢。

标签: java spring spring-mvc


【解决方案1】:

文件应绑定到RequestParam 而不是RequestBody,如下所示:

public ResponseEntity<ResponseEnvelope<String>> uploadFile(
         @RequestParam("ownerId") Long ownerId, 
         @PathVariable("fileName") String fileName,
         @RequestParam(value = "file") MultipartFile file)

这将对应于以下 HTML 表单:

<form method="post" action="some action" enctype="multipart/form-data">
    <input type="file" name="file" size="35"/>
</form>

然后在您的调度程序配置中指定CommonsMultiPartResolver

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

【讨论】:

  • 感谢您的友好回复,我尝试使用 @RequestParam,但我遇到了另一个问题,“{"error":{"status":400,"message":"An unknown error has在执行此请求期间发生。","errorParams":{"exceptionMessage":"所需的 MultiPart 参数 'file' 不存在"}}}",我还在我的配置中指定了 commonsMultiPartResolver,非常感谢。
  • 问题已解决,问题是我需要指定参数名称...当我发帖时,谢谢。
  • @Berry2081898 我现在遇到这个问题,你在做POST时指定参数名称是什么意思?我正在使用 AJAX 进行发布请求。我将感谢您的任何帮助,在此先感谢。这是我的 stackoverflow 问题的链接:stackoverflow.com/questions/27772803/…
  • @Berry2081898 或者您也可以发布自己问题的答案,以便其他人也能看到!
【解决方案2】:

这对我有用,

以前我的input 字段被定义为,

<input type="file" />

我在上面的行中得到了空文件,但是当我添加 name="file" 时一切正常!

<input type="file" name="file" />

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 2016-12-24
    • 2019-06-24
    • 2013-07-16
    • 2020-01-20
    • 2015-09-02
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多