在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本来就来具体说说如何实现。
服务提供方(接收文件)
服务提供方的实现比较简单,就按Spring MVC的正常实现方式即可,比如:
1
2
3
4
5
6
7
8
9
|
@RestController public class UploadController { @PostMapping (value = "/uploadFile" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public String handleFileUpload( @RequestPart (value = "file" ) MultipartFile file) { return file.getName(); } } |
服务消费方(发送文件)
在服务消费方由于会使用Feign客户端,所以在这里需要在引入feign对表单提交的依赖,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< dependency > < groupId >io.github.openfeign.form</ groupId > < artifactId >feign-form</ artifactId > < version >3.0.3</ version > </ dependency > < dependency > < groupId >io.github.openfeign.form</ groupId > < artifactId >feign-form-spring</ artifactId > < version >3.0.3</ version > </ dependency > < dependency > < groupId >commons-fileupload</ groupId > < artifactId >commons-fileupload</ artifactId > </ dependency > |
定义FeignClient,假设服务提供方的服务名为 upload-server
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@FeignClient (value = "upload-server" , configuration = TestServiceClient.MultipartSupportConfig. class ) public interface UploadService { @PostMapping (value = "/uploadFile" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String handleFileUpload( @RequestPart (value = "file" ) MultipartFile file); @Configuration class MultipartSupportConfig { @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(); } } } |
在启动了服务提供方之后,尝试在服务消费方编写测试用例来通过上面定义的Feign客户端来传文件,比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Test @SneakyThrows public void testHandleFileUpload() { File file = new File( "files/aaa.txt" ); DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem( "file" , MediaType.TEXT_PLAIN_VALUE, true , file.getName()); try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) { IOUtils.copy(input, os); } catch (Exception e) { throw new IllegalArgumentException( "Invalid file: " + e, e); } MultipartFile multi = new CommonsMultipartFile(fileItem); log.info(testServiceClient.handleFileUpload(multi)); } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.didispace.com/spring-cloud-starter-dalston-2-4