通过WEB页面上传文件并调用第三方feign接口处理上传实现

场景:
在A应用里面提供web接口给前端接收上传的文件,然后A应用再通过feign接口调用B应用,将文件进行传输,B应用真正处理文件上传到服务器,同时上传文件时除了文件参数还有其他额外的参数。

一开始想当然的简单写了web接口和feign接口,结果测试各种报错,比如以下几个错误:

1、Current request is not a multipart request
2、the request was rejected because no multipart boundary was found
3、Required request part ‘file’ is not present

经过排查修改终于解决了,直接上最后成功的代码,如下:

1、应用A提供的web接口

@RestController
@RequestMapping("/upload")
public class UploadAController
	@Autowired
    private UploadClient uploadClient;

	@PostMapping(value = "/lyc/test/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	BizResponse<String> uploadFile(@RequestPart("file") MultipartFile file, String extraParam){
		return uploadClient.upload(file, extraParam);
	}
}

2、调用方应用A的feignClient定义

@FeignClient(name = "test-B")
public interfact UploadClient{

	@PostMapping(value = "/lyc/test/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	BizResponse<String> upload(@RequestPart("file") MultipartFile file, @RequestParam(value = "extraParam",required = false)String extraParam)
}

3、提供方应用B的文件上传接口:

@RestController
@RequestMapping("/upload")
public class UploadBController
	@Autowired
    private UploadService uploadService;

	@PostMapping(value = "/lyc/test/uploadFile")
	BizResponse<String> upload(@RequestParam("file") MultipartFile file, String extraParam){
		return uploadService.doUpload(file, extraParam);
	}
}

需要注意这几个点
(1)feign接口多个参数必须加上consumes = MediaType.MULTIPART_FORM_DATA_VALUE,而且对应的file要用@RequestPart
(2)@RequestPart(“file”),这里的“file”定义接口调用方和提供方必须一致
(3)feign实现文件上传还需要引入依赖

<dependency>
 	<groupId>io.github.openfeign.form</groupId>
 	<artifactId>feign-form</artifactId>
 	<version>xxx</version>
</dependency>

<dependency>
 	<groupId>io.github.openfeign.form</groupId>
 	<artifactId>feign-form-spring</artifactId>
 	<version>xxx</version>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值