Spring Mvc文件上传@RequestPart和@RequestParam区别
@RequestPart(主要用来接收文件)
/**
* 单文件上传
* @param file
* @param bucket
* @return
*/
@RequestMapping("uploadFile")
public JsonResult uploadFile(@RequestPart("file") MultipartFile file, @RequestParam String bucket){
String fileUrl = aliossService.uploadFile(file, bucket);
Map<String,String> result = new HashMap<>();
result.put("fileUrl",fileUrl);
return success(result);
}
@RequestPart
这个注解用在multipart/form-data
表单提交请求的方法上。- 支持的请求方法的方式
MultipartFile
,属于Spring的MultipartResolver
类。这个请求是通过http
协议传输的
@RequestParam(一个方法中能使用多次)
/**
* 单文件上传
* @param stringFile
* @param bucket
* @return
*/
@RequestMapping("uploadStringFile")
public JsonResult uploadStringFile(@RequestParam("file") MultipartFile file, @RequestParam("bucket") String bucket){
String fileUrl = aliossService.uploadFile(file, bucket);
Map<String,String> result = new HashMap<>();
result.put("fileUrl",fileUrl);
return success(result);
}
-
用来处理
Content-Type:
为application/x-www-form-urlencoded
编码的内容。(Http协议中,如果不指定Content-Type
,则默认传递的参数就是application/x-www-form-urlencoded
类型) -
RequestParam
可以接受简单类型的属性,也可以接受对象类型。 实质是将Request.getParameter()
中的Key-Value
参数Map利用Spring的转化机制ConversionService
配置,转化成参数接收对象或字段。 -
在
Content-Type: application/x-www-form-urlencoded
的请求中,GET
方式中queryString
的值,和POST
方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()
参数集中,所以@RequestParam
可以获取的到。
区别
@RequestPart
这个注解用在multipart/form-data
表单提交请求的方法上。 支持的请求方法的方式MultipartFile
,属于Spring的MultipartResolver
类。这个请求是通过http协议传输的。@RequestParam
也同样支持multipart/form-data
请求。(即两者都能用于后端接收文件) 他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。@RequestParam
适用于name-valueString
类型的请求域,@RequestPart
适用于复杂的请求域(像JSON,XML)。
文件参考