[英]Spring MVC MultipartFile problems
我正在尝试使用一种方法运行一个简单的控制器,该方法将接收
经过一些调查( 使用 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
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;
}
需要明确的是,问题不在于“名称”参数,该参数工作正常,但是 MultipartFile 为空。
通过调试代码,我设法检查了接收 HttpServletRequest 对象的 MultiPartFilter 类,该对象的“parts”属性在那里已经为空。 所以这个问题似乎与我提出请求的方式有关......似乎我的邮递员/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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.