主要记录SpringCloud在调Feign传文件时的问题:
1.(按注意点2改正即可)
Current request is not a multipart request(按注意点2改正即可)
2.(按注意点3处理即可)
The field files exceeds its maximum permitted size of 1048576 bytes.(按注意点3处理即可)
注意点1:
如果你的A服务(调用端)和B服务(被调用端)不在一个服务器上(分布式服务),请不要使用以下方式(不要直接将java.io.file作为参数传递);否则会发现file只有文件名,path等属性,但实际大小为0kb(原理:是以path作为file根传递的,如果不是一个服务器,就会有坑,如果在一个服务器上理论上是没问题的,由于我的项目是分布式,所以这里我这里没尝试)
@PostMapping(value="/upload_feign")
public AjaxResult upload_feign(@RequestParam(value = "file") File file) ;
注意点2:报Current request is not a multipart request
分布式使用Feign传文件时正确姿势:
2.1被调用端feigh:
@PostMapping(value="/_upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AjaxResult upload(@RequestPart(value = "file") MultipartFile file) ;
2.2被调用端feigh的指向(被调用端业务代码):
@PostMapping(value="/_upload_",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AjaxResult _upload_(@RequestPart(value = "file") MultipartFile file, ) throws Exception {
//具体业务************
return "";
}
2.3调用端
remoteService._upload_(multipartFile);
注意点3:如果以上改正完毕报错: The field files exceeds its maximum permitted size of 1048576 bytes
3.1启动类新增以下内部类:
public class Application {
public static void main(String[] args) {
SpringApplication.run(WmsApplication.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//允许上传的文件最大值
factory.setMaxFileSize( DataSize.parse("102400KB")); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.parse("102400KB"));
return factory.createMultipartConfig();
}
3.2配置application.yml新增以下节点:
spring:
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
然后调用结果成功如下:
以上我已亲测,记录不易转载请注明出处。