Spring Cloud Feign文件传输的示例代码

2025-05-29 0 78

一、配置文件解析器

服务提供者和消费者都需要配置文件解析器,这里使用 commons-fileupload 替换原有的解析器:

依赖:

?

1

2

3

4

5
<dependency>

<groupid>commons-fileupload</groupid>

<artifactid>commons-fileupload</artifactid>

<version>1.3.1</version>

</dependency>

注入 bean :

?

1

2

3

4

5

6
@bean(name = "multipartresolver")

public multipartresolver mutipartresolver(){

commonsmultipartresolver com = new commonsmultipartresolver();

com.setdefaultencoding("utf-8");

return com;

}

程序入口中剔除原有的解析器:

?

1
@springbootapplication(exclude = {multipartautoconfiguration.class})

二、服务提供者,即接收文件一方的配置

controller 的写法:

?

1

2

3

4

5

6

7

8

9

10

11
@responsebody

@requestmapping(value = "/upload", method = {requestmethod.post},

produces = {mediatype.application_json_utf8_value},

consumes = mediatype.multipart_form_data_value)

public result<string> uploadfile(@requestpart("file")multipartfile file,

@requestparam("id")long id){

string filename = file.getoriginalfilename();

string extend = fileoperateutil.suffix(filename);

fileoperateutil.copy("e:\\\\" + filename, file);

return resultbuilder.success("ok");

}

@requestpart 指定文件,后面的 @requestparam 是额外参数,注意额外参数不能超过url长度限制。

三、服务消费者配置

依赖:

?

1

2

3

4

5

6

7

8

9

10
<dependency>

<groupid>io.github.openfeign.form</groupid>

<artifactid>feign-form-spring</artifactid>

<version>3.2.2</version>

</dependency>

<dependency>

<groupid>io.github.openfeign.form</groupid>

<artifactid>feign-form</artifactid>

<version>3.2.2</version>

</dependency>

文件编码配置:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
import feign.codec.encoder;

import feign.form.spring.springformencoder;

import org.springframework.beans.factory.objectfactory;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.boot.autoconfigure.web.httpmessageconverters;

import org.springframework.cloud.netflix.feign.support.springencoder;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

@configuration

public class multipartsupportconfig{

@autowired

private objectfactory<httpmessageconverters> messageconverters;

@bean

public encoder feignformencoder(){

return new springformencoder(new springencoder(messageconverters));

}

}

feign 接口定义:

?

1

2

3

4

5

6

7

8

9

10

11
@feignclient(name = "test-upload")

public interface uploadservice{

@responsebody

@requestmapping(value = "/upload", method = {requestmethod.post},

produces = {mediatype.application_json_utf8_value},

consumes = mediatype.multipart_form_data_value)

result<string>uploadfile(@requestpart("file")multipartfile file,

@requestparam("id")long id);

}

与普通 feign 接口写法差不多,注意方法注解和参数与服务提供者的 controller 一样。

controller 的写法, controller 中接收前端传过来的文件信息和额外参数,然后通过 feign 接口传输到远端:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
// 注入 feign 接口

@autowired

private uploadservice uploadservice;

@requestmapping(value = "/upload", method = requestmethod.post, produces = "application/json; charset=utf-8")

@responsebody

public result<string> testupload(httpservletrequest request, long id){

result<string> result = null;

multiparthttpservletrequest mrequest = (multiparthttpservletrequest) request;

map<string, multipartfile> filemap = mrequest.getfilemap();

for (multipartfile mfile : filemap.values()) {

string filename = mfile.getoriginalfilename();

result = uploadservice.uploadfile(mfile, id);

}

return result;

}

四、总结

最后梳理一下流程,服务消费者接收前端(如浏览器)传过来的文件,但是并不进行业务处理,然后通过 feign 调用接口,把文件传给服务提供者,服务提供者拿到文件后,进行相应的业务处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.ciphermagic.cn/spring-cloud-feign-upload.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Spring Cloud Feign文件传输的示例代码 https://www.kuaiidc.com/111700.html

相关文章

发表评论
暂无评论