Feign实现跨服务文件上传下载

网友投稿 634 2023-01-08


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})

public interface FileClient {

String PREFIX_PATH = "/oss/files";

/**

* 上传存储文件

* @param file

* @return

* @throws IOException

*/

@PostMapping(value = PREFIX_PATH + "/", consumes = MULTIPART_FORM_DATA_VALUE)

FeignResult save(@RequestPart(value = "file") MultipartFile file) throws IOException;

}

③.添加配置来满足feign的调用

@Configuration

public class FileFeignConfig {

@Autowired

private ObjectFactory messageConverters;

@Bean

@Primary

@Scope("prototype")

public Encoder feignEncoder() {

return new SpringFormEncoder(new SpringEncoder(messageConverters));

}

@Bean

public feign.Logger.Level multipartLoggerLevel() {

return feign.Logger.Level.FULL;

}

}

④.外部服务的controller层调用

public class TestController extends BaseRestController {

@Autowired

FileClient client;

/**

* 上传文件

**/

@PostMappinBpgBZg(value = "/" , consumes = MULTIPART_FORM_DATA_VALUE)

public FileEntity save(@RequestPart(value = "file") MultipartFilehttp:// file) throws IOException {

FileEntity fileEntity = client.save(file).getData();

return fileEntity;

}

}

到此位置就可以上传成功了

2、跨服务的文件下载

①.下载的接口(也是写在public interface FileClient),是用feign.Response来作为返回值的

/**

* 下载文件

* @param id

* @return

* @throws IOException

*/

@GetMapping(value = PREFIX_PATH + "/{id}/data")

Response download(@PathVariable("id") String id) throws IOException;

②.外部服务的controller层调用

/**

*由id下载存储的文件

*/

@GetMapping(value = "/{id}/data")

public void downloadFile(@PathVariable String id, HttpServletResponse servletResponse) throws IOException {

Response response = client.download(id);

Resphttp://onse.Body body = response.body();

for(Object key : response.headers().keySet()){

List kList = (List)response.headers().get(key);

for(String val : kList){BpgBZ

servletResponse.setHeader(StringUtils.toString(key), val);

}

}

try(InputStream inputStream = body.asInputStream();

OutputStream outputStream = servletResponse.getOutputStream()

){

byte[] b = new byte[inputStream.available()];

inputStream.read(b);

outputStream.write(b);

outputStream.flush();

}catch (IOException e){

throw new RestException("IO流异常", e);

}

}

至此,下载文件完成。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:自动生成接口测试数据(自动生成接口测试数据的软件)
下一篇:java调用微信接口实现网页分享小功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~