Feign实现跨服务文件上传下载
本文实例为大家分享了Feign实现跨服务的文件上传下载操作,供大家参考,具体内容如下
1、跨服务文件上传,目前feign不支持调用文件上传接口,需要自行配置来满足feign的调用方式
①.首先需要在pom文件里添加feign依赖
io.github.openfeign.form feign-form-spring 3.2.2 io.github.openfeign.form feign-form 3.2.2
②.上传的接口
@FeignClient(value="fdn-storage",configuration={FileFeignConfig.class}) publicinterfaceFileClient{ StringPREFIX_PATH="/oss/files"; /** *上传存储文件 *@paramfile *@return *@throwsIOException */ @PostMapping(value=PREFIX_PATH+"/",consumes=MULTIPART_FORM_DATA_VALUE) FeignResultsave(@RequestPart(value="file")MultipartFilefile)throwsIOException; }
③.添加配置来满足feign的调用
@Configuration publicclassFileFeignConfig{ @Autowired privateObjectFactorymessageConverters; @Bean @Primary @Scope("prototype") publicEncoderfeignEncoder(){ returnnewSpringFormEncoder(newSpringEncoder(messageConverters)); } @Bean publicfeign.Logger.LevelmultipartLoggerLevel(){ returnfeign.Logger.Level.FULL; } }
④.外部服务的controller层调用
publicclassTestControllerextendsBaseRestController{ @Autowired FileClientclient; /** *上传文件 **/ @PostMapping(value="/",consumes=MULTIPART_FORM_DATA_VALUE) publicFileEntitysave(@RequestPart(value="file")MultipartFilefile)throwsIOException{ FileEntityfileEntity=client.save(file).getData(); returnfileEntity; } }
到此位置就可以上传成功了
2、跨服务的文件下载
①.下载的接口(也是写在publicinterfaceFileClient),是用feign.Response来作为返回值的
/** *下载文件 *@paramid *@return *@throwsIOException */ @GetMapping(value=PREFIX_PATH+"/{id}/data") Responsedownload(@PathVariable("id")Stringid)throwsIOException;
②.外部服务的controller层调用
/** *由id下载存储的文件 */ @GetMapping(value="/{id}/data") publicvoiddownloadFile(@PathVariableStringid,HttpServletResponseservletResponse)throwsIOException{ Responseresponse=client.download(id); Response.Bodybody=response.body(); for(Objectkey:response.headers().keySet()){ ListkList=(List)response.headers().get(key); for(Stringval:kList){ servletResponse.setHeader(StringUtils.toString(key),val); } } try(InputStreaminputStream=body.asInputStream(); OutputStreamoutputStream=servletResponse.getOutputStream() ){ byte[]b=newbyte[inputStream.available()]; inputStream.read(b); outputStream.write(b); outputStream.flush(); }catch(IOExceptione){ thrownewRestException("IO流异常",e); } }
至此,下载文件完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。