上传失败 请求文件服务器错误,feign 上传文件服务调用失败

上传文件配置

增加如下依赖:

io.github.openfeign.form

feign-form-spring

<!--3.2.2 -->

io.github.openfeign.form

feign-form

3.2.2

增加相关配置:

@Configuration

public class FeignSupportConfig {

@Bean

public Encoder feignFormEncoder() {

return new SpringFormEncoder();

}

}

如果上传文件的时候有相关 requestbody 的参数接收

按照下面配置:

@Configuration

public class MultipartSupportConfig {

@Autowired

private ObjectFactory messageConverters;

@Bean

@Primary

@Scope("prototype")

public Encoder feignEncoder() {

return new SpringFormEncoder(new SpringEncoder(messageConverters));

}

}

编写 feignclient

@FeignClient(name = "rpt-file-service", fallback = FileUploadServiceFallback.class, configuration = FileUploadService.UserFeignConfig.class)

public interface FileUploadService {

@RequestMapping(value = "/fdfs/upload", method = RequestMethod.POST,consumes= MediaType.MULTIPART_FORM_DATA_VALUE)

@ResponseBody

@CrossOrigin

public Map upload(@RequestPart(value = "file", required = false) MultipartFile file) throws Exception;

}

增加FeginInterceptor 后,文件上传失败的处理

为了服务之间调用传递token,同事增加了如下方法:

@Configuration

public class FeginInterceptor implements RequestInterceptor {

@Override

public void apply(RequestTemplate requestTemplate) {

try {

Map headers = getHeaders();

for(String headerName : headers.keySet()){

requestTemplate.header(headerName, headers.get(headerName));

}

}catch (Exception e){

e.printStackTrace();

}

}

private Map getHeaders(){

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

Map map = new LinkedHashMap();

Enumeration enumeration = request.getHeaderNames();

while (enumeration.hasMoreElements()) {

String key = enumeration.nextElement();

String value = request.getHeader(key);

map.put(key, value);

}

return map;

}

}

以上方法拦截所有的feign请求,重新设置了请求头,但也拦截了文件上传的请求头,导致服务端接收到的文件为空,调用失败,解决这个问题,需要放开对文件上传服务的拦截,修改如下代码:

@Configuration

public class FeginInterceptor implements RequestInterceptor {

@Override

public void apply(RequestTemplate requestTemplate) {

// 文件上传不拦截请求

if("/fdfs/upload".equals(requestTemplate.url())){

return;

}

try {

Map headers = getHeaders();

for(String headerName : headers.keySet()){

requestTemplate.header(headerName, headers.get(headerName));

}

}catch (Exception e){

e.printStackTrace();

}

}

private Map getHeaders(){

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

Map map = new LinkedHashMap();

Enumeration enumeration = request.getHeaderNames();

while (enumeration.hasMoreElements()) {

String key = enumeration.nextElement();

String value = request.getHeader(key);

map.put(key, value);

}

return map;

}

}

华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明feign 上传文件服务调用失败!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值