天天看點

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

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