Feign调用文件下载服务接口实例

Feign调用文件下载服务接口实例

服务提供者:

@PostMapping(value = “/downLoadFile”)
public void downloadFile(@RequestParam String path, HttpServletResponse response) {
File file = new File(path);
FileUtil.fileDownload(response, file, false);
}

FileUtil工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

public class FileUtil {
private static final Logger logger = LoggerFactory.getLogger(FileUtil.class);

/**
* 将指定文件对象写入到特定的Servlet响应对象,进而实现下载
* 一般用于下载已经存在的文件
*
* @param response 目标Servlet响应对象
* @param file 要下载的文件对象
* @param isDeleteOriginal 是否删除服务器文件原本,true下载后将删除服务器上的文件
*/
public static void fileDownload(HttpServletResponse response, File file, Boolean isDeleteOriginal) {
try {
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
response.setContentType(“multipart.form-data”)
response.setHeader(“Content-Disposition”, “attachment; filename=” + URLEncoder.encode(file.getName(), “UTF-8”));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());

       int length = 0;
       byte[] temp = new byte[1024 * 10];
       while ((length = bufferedInputStream.read(temp)) != -1) {
           bufferedOutputStream.write(temp, 0, length);
       }
       bufferedOutputStream.flush();
       bufferedOutputStream.close();
       bufferedInputStream.close();
       inputStream.close();
       if (isDeleteOriginal) {
           file.delete();
       }
   } catch (FileNotFoundException e) {
       e.printStackTrace();
       logger.error(e.getMessage());
   } catch (IOException e) {
       e.printStackTrace();
       logger.error(e.getMessage());
   }

}
}

Feign客户端(服务消费者)的代码

import feign.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = “smis-mbl”)
public interface UserFeignClient extends FeignClientParent {
@GetMapping(value = “/update/downLoadFile”,consumes = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
Response downloadFile(@RequestParam String path);
}

Feign客户端(服务消费者)的Controller接口方法

@GetMapping(value = “/downLoadFile”)
public void downloadFile(@RequestParam String path, HttpServletResponse response) {
InputStream inputStream = null;
try {
Response serviceResponse = this.userFeignClient.downloadFile(path);
Response.Body body = serviceResponse.body();
inputStream = body.asInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
response.setContentType(“multipart.form-data”)
response.setHeader(“Content-Disposition”, serviceResponse.headers().get(“Content-Disposition”).toString().replace("[","").replace("]",""));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
int length = 0;
byte[] temp = new byte[1024 * 10];
while ((length = bufferedInputStream.read(temp)) != -1) {
bufferedOutputStream.write(temp, 0, length);
}
bufferedOutputStream.flush();
bufferedOutputStream.close();
bufferedInputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}

这一段代码是为了保持服务提供者一致的文件下载输出,其中就包括文件名!

serviceResponse.headers().get(“Content-Disposition”).toString().replace("[","").replace("]","")
1
原理:就是将服务提供者的文件下载响应的响应体(文件内容)复制到服务消费者对外的文件下载响应体中
————————————————
版权声明:本文为CSDN博主「fate急速出击」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43627706/article/details/109256074

Feign是一个声明性的Web服务客户端,它可以让我们以类似Controller调用Service的方式来调用服务。通过Feign,我们可以更简单、便捷地调用HTTP API,而不用自己拼接URL和参数。 下面是一个使用Feign进行服务调用的简单实例: 首先,我们需要创建一个消费者客户端的Maven项目。然后,在项目的pom.xml文件中添加Feign的依赖。 接着,我们需要创建一个接口,使用@FeignClient注解来声明该接口是一个Feign客户端,并指定要调用服务名称。 在接口中,我们可以定义对应服务的各个接口方法,并使用@RequestMapping注解来指定具体的请求路径和参数。 最后,我们可以在其他的组件中,通过注入该Feign客户端接口来使用Feign进行服务调用。 这样,我们就可以通过Feign简单地实现服务之间的调用了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringCloud Feign 服务调用的实现](https://download.csdn.net/download/weixin_38622611/12752078)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springcloud通过Feign服务调用实例](https://blog.csdn.net/haokelaicds/article/details/125197476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值