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