当前位置: 首页 > 知识库问答 >
问题:

Spring MVC多部分文件问题

阳航
2023-03-14

我试图运行一个简单的控制器,该方法将接收

  • 具有值的字符串
  • 文件(MultipartFile对象)

经过一些研究(用RestTemplate请求将多部分文件作为POST参数发送),我最终将其添加到web.xml

<filter>
    <filter-name>multipartFilter</filter-name>
    <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>multipartFilter</filter-name>
    <url-pattern>/REST/*</url-pattern>
</filter-mapping>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize">
        <value>104857600</value>
    </property>
    <property name="maxInMemorySize">
        <value>4096</value>
    </property>
</bean>
@Controller
@RequestMapping("/image")
public class ImageController  extends RestApiController {

private static final Logger log = LoggerFactory.getLogger(ImageController.class);

@RequestMapping(value="/simple", method = RequestMethod.POST, consumes="multipart/form-data")
public @ResponseBody boolean save(
        @RequestParam(value = "file", required = false) MultipartFile file,
        @RequestParam(value = "name", required = false) String name) {

        //Some code here
    return true;
}

到目前为止,我已经能够毫无问题地对控制器运行单元测试,但在创建真正的http请求时,我似乎被卡住了。

我试过使用POSTMAN,但经过一些调查后,它似乎没有正确设置multipart/form-data头,我尝试删除它,但问题仍然存在。

我也尝试过卷曲

curl http://127.0.0.1:8080/content/REST/image/simple -F "file=@/home/jmoriano/Pictures/simple.jpeg" -F "name=someName" -v 

我还尝试了RestTemplate对象

public Boolean update() {
    RestTemplate restTemplate = new RestTemplate();
    try {
        FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
        formConverter.setCharset(Charset.forName("UTF8"));
        restTemplate.getMessageConverters().add(formConverter);
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        HttpHeaders httpHeaders = new HttpHeaders();         httpHeaders.setAccept(Collections.singletonList(MediaType.parseMediaType("application/json")));
        MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
        parts.add("file", new FileSystemResource("/home/jmoriano/Pictures/simple.jpeg"));
        parts.add("name", "name");
        return restTemplate.postForObject("http://127.0.0.1:8080/content/REST/image/simple", parts, Boolean.class);
    } catch (Exception e) {
        e.printStackTrace();
        log.error("Ouch!", e);
    }
    return false;
}

要明确的是,问题不在“name”参数中,这个参数可以正常工作,但是MultipartFile是空的。

通过调试代码,我设法检查了接收HttpServletRequest对象的MultiPartFilter类,该对象的“parts”属性已经为空。所以问题似乎与我提出请求的方式有关...似乎我的邮递员/curl/java尝试失败了...你看到我的配置中有什么不正确的吗?

共有1个答案

傅泉
2023-03-14

我认为应该将beanMultipartResolver放到dispathcher-servlet.xml中

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

在上面显示的链接中,它们也使用这个bean。

<bean id="multipartResolver"  
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <property name="maxUploadSize">  
        <value>104857600</value>  
    </property>  
    <property name="maxInMemorySize">  
        <value>4096</value>  
    </property>      
</bean>
 类似资料:
  • 我试图编写完整的多部分流,从客户端使用Spring restTemplate发送多部分请求,从服务器端自动将不同部分解析为对象(我使用JAXB进行对象封送),并以多部分形式返回响应。 我能够实现几乎所有的流,但是我不能从spring Controller中用jaxb对象发送多部分响应。 试图使he FormHttpMessageConverter正确地编写部分,但这没有帮助 是否有任何方法使Spr

  • 我尝试使用Spring的Reactive Framework实现和映像上传,方法如下: 但我一直得到一个415,并带有以下错误消息: 如何使Spring Reactive Web MVC能够处理多部分文件?

  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的:

  • 有没有办法将文件对象转换为多部分文件?以便我可以将该对象发送到接受接口对象的方法?

  • 我正在尝试使用@Controller和@Request estMap使用Spring 3.1.2上传多个文件。 下面是我做的和我的配置。 格式 : 控制器方法: 我的会议: 提交表单确实会转到添加文件系统映像方法。locId 参数的数据位于此处,但“文件”参数未绑定。无论我尝试过什么参数/字段名称/参数类型的组合,它都是系统性的空值。 HttpServletRequest参数是一个org.spri

  • 我正在尝试编写一个SpringMVC方法,它可以接收多部分/表单或传输编码的分块文件上传。我可以编写一个单独的方法来处理每种类型,但我希望使用相同的方法,以便使用相同的REST POST uri,例如: 以下是我迄今为止最好的尝试: 使用上述方法,我可以上传一个多部分文件,但如果我上传一个分块文件,我会从spring得到一个异常,它说: 如果我删除MultipartFile请求参数,它非常适合分块