Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC多部分文件问题_Java_Spring_Spring Mvc_Multipartform Data - Fatal编程技术网

Java Spring MVC多部分文件问题

Java Spring MVC多部分文件问题,java,spring,spring-mvc,multipartform-data,Java,Spring,Spring Mvc,Multipartform Data,我正在尝试运行一个简单的控制器,其方法将接收 带值的字符串 文件(多部分文件对象) 经过一些调查()之后,我最终将添加到web.xml中 <filter> <filter-name>multipartFilter</filter-name> <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> &l

我正在尝试运行一个简单的控制器,其方法将接收

  • 带值的字符串
  • 文件(多部分文件对象)
经过一些调查()之后,我最终将添加到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>
到目前为止,我已经能够对控制器运行单元测试,没有问题,但在创建真正的http请求时,我似乎被卡住了

我尝试过使用POSTMAN,但经过一些调查,似乎它没有正确设置多部分/表单数据头,我尝试过删除它,问题仍然存在

我也试过卷发

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;
}
公共布尔更新(){
RestTemplate RestTemplate=新RestTemplate();
试一试{
FormHttpMessageConverter formConverter=新FormHttpMessageConverter();
formConverter.setCharset(Charset.forName(“UTF8”);
restemplate.getMessageConverters().add(formConverter);
setRequestFactory(新的HttpComponentsClientHttpRequestFactory());
HttpHeaders HttpHeaders=new HttpHeaders();HttpHeaders.setAccept(Collections.singletonList(MediaType.parseMediaType(“application/json”));
MultiValueMap parts=新链接的MultiValueMap();
添加(“文件”,新文件系统资源(“/home/jmoriano/Pictures/simple.jpeg”);
部分。添加(“名称”、“名称”);
返回restTemplate.postForObject(“http://127.0.0.1:8080/content/REST/image/simple“,部件,布尔值.class);
}捕获(例外e){
e、 printStackTrace();
log.error(“哎哟!”,e);
}
返回false;
}
需要明确的是,问题不在于“name”参数,它可以正常工作,但是MultipartFile是空的


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

我认为您应该将bean
multipartResolver
放到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>

104857600
4096

谢谢,不幸的是,我的代码中已经包含了这一点(忘了在问题中提及…)还有其他想法吗?只是快速更新,问题与我的配置无关,这很好,但与webapp使用Struts2和SpringMVC这一事实有关,不幸的是,多部分请求由Struts2过滤器处理,因此,我需要创建一个自定义过滤器,将Struts2的过滤器排除在处理某些URL(SpringMVC提供的URL)的过程之外
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<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>