一、配置文件解析器
服务提供者和消费者都需要配置文件解析器,这里使用 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
|
|
二、服务提供者,即接收文件一方的配置
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
相关文章
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 76
-
2025-05-29 68
-
.Net Core中间件之静态文件(StaticFiles)示例详解
2025-05-29 91 -
2025-06-04 43
-
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2025-05-29 68

