1. 程式人生 > 實用技巧 >eureka 經過閘道器transferRequest下載檔案

eureka 經過閘道器transferRequest下載檔案


/**
* Rest模板物件,用於http訪問
* 當前物件已經使用@LoadBanlnced 實現的負載均衡
*/
@Autowired
@Qualifier("siteRestTemplate")
RestTemplate restTemplate;

//閘道器介面
@RequestMapping("/transferRequest/download")
public void transferRequest(String action, String site, String params, String method, Integer timeout, HttpServletResponse httpServletResponse) {
//這裡只需要把服務提供者的applicaitonName和介面名稱寫上即可
String url = "http://" + site + action;
HttpHeaders headers = getHttpHeadersByRequest(request);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap postParams = getPostParams(params);
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity(postParams, headers);
HttpMethod requestMethod = "GET".equals(method) ? HttpMethod.GET : HttpMethod.POST;
  //如果改用實體類接收,檔案的二進位制陣列會自動轉換為字串,需要重新轉換為檔案二進位制陣列,暫時沒找到辦法轉換
ResponseEntity<byte[]> response = restTemplate.exchange(url, requestMethod, httpEntity, byte[].class);
LOGGER.info("中轉請求返回:" + response.getStatusCode() + " | " + response.getBody());
try {
HttpHeaders obj = response.getHeaders();
String filename = String.valueOf(obj.get("filename"));
if(filename != null && filename.length()>0){
filename = filename.replace("[","").replace("]","");
}
httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));

OutputStream outputStream = httpServletResponse.getOutputStream();
outputStream.write(response.getBody());
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}

}

  //下載介面
  @RequestMapping("/liu")
@ResponseBody
public void liu(HttpServletResponse response, HttpServletRequest request){
try {
File file = new File("D:\\ytzz\\yulin\\excleFilePath\\登記臺賬2020-05-21-18-06-53.xls");
byte[] bytes = FileUtils.readFileToByteArray(file);
response.setHeader("filename", URLEncoder.encode(file.getName(), "UTF-8"));
response.getOutputStream().write(bytes);
response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
}