spring mvc 中不存在所需的 MultipartFile 参数“file”

问题描述 投票:0回答:5

我正在尝试向我的 spring mvc 应用程序添加上传图片的功能。

jsp部分:

...
<form method="POST"  action="uploadImage" enctype="multipart/form-data">
                <div class="load-line">
                    <input type="file" class="file"/>
                    <input type="submit" value="Upload">
...

配置:

... 
<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
...

控制器:

 @RequestMapping(value="/member/createCompany/uploadImage", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(
            @RequestParam("file") MultipartFile file){
        String name = "image_name";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }

选择图片后,我单击上传并看到错误消息:

HTTP Status 400 - Required MultipartFile parameter 'file' is not present

我做错了什么?

java image spring spring-mvc file-upload
5个回答
19
投票

您尚未指定

name
属性,
@RequestParam("textFile")
需要名称,

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

11
投票

将名称属性添加到“文件”输入标签

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

2
投票

对于那些找不到合适解决方案的人,请不要忘记添加

spring.http.multipart.enabled=true

到您的配置文件


2
投票

对于Springboot: 如果您的应用程序不使用 spring-boot-starter-web 和 spring-boot-starter-data-rest,而是使用“spring-boot-starter-webflux”,那么您将收到错误“HTTP Status 400 - required MultipartFile”当您在 POST 请求中使用“@RequestParam("file") MultipartFile file”时,参数“file”不存在”。

由于 webflux 是一个反应式库,因此不支持 MultipartFile。

您需要点击此链接以反应式编程方式上传表单数据。 https://github.com/entzik/reactive-spring-boot-examples/blob/master/src/main/java/com/thekirschners/springbootsamples/reactiveupload/ReactiveUploadResource.java

我已经尝试了很多。对于仅 webflux 的应用程序,上述解决方案单独有效。


0
投票

在 Spring Framework 中,一些 bean 名称是预定义的或基于约定的,这意味着它们需要具有特定的名称才能使某些功能正常工作。 CommonsMultipartResolver bean 就是这样一种 bean,其名称是基于约定的,并且默认情况下预计将其命名为“multipartResolver”。将其更改为“multiPartResolver”或任何其他名称可能会导致问题,因为 Spring 可能无法自动将其识别为负责处理文件上传的 bean。

© www.soinside.com 2019 - 2024. All rights reserved.