Spring Cloud Feign的文件上传实现的示例代码
程序员文章站
2022-05-28 14:21:45
在spring cloud封装的feign中并不直接支持传文件,但可以通过引入feign的扩展包来实现,本来就来具体说说如何实现。
服务提供方(接收文件)
服务提供方的...
在spring cloud封装的feign中并不直接支持传文件,但可以通过引入feign的扩展包来实现,本来就来具体说说如何实现。
服务提供方(接收文件)
服务提供方的实现比较简单,就按spring mvc的正常实现方式即可,比如:
@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对表单提交的依赖,具体如下:
<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
@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客户端来传文件,比如:
@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)); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 百度地图发布地图语音定制功能