1. 程式人生 > >Rest 下載檔案被呼叫介面及 呼叫方法

Rest 下載檔案被呼叫介面及 呼叫方法

下載檔案被呼叫介面:

@PostMapping("/download/") @Transactional public ResponseEntity<byte[]> downloadFile(@Valid @RequestBody XXXVo vo) throws IOException {  if(null==vo){ return new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST); } String path = ResourceUtils.CLASSPATH_URL_PREFIX + "file_templates/"; String fileName = "temp.xls"; File file = ResourceUtils.getFile(path + fileName); FileInputStream in = new FileInputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(in); byte[] fileArray = null; try { fixedWorkbook(workbook, vo); fileArray = readWorkbookStream

(workbook); } catch (Exception e) { e.printStackTrace(); } finally { IOUtil.close(workbook, in); } return new ResponseEntity<byte[]>(fileArray, HttpStatus.OK); }

/** * 讀取 HSSFWorkbook * @param wb * @return byte[] * @throws IOException */ public static byte[] readWorkbookStream(HSSFWorkbook wb) throws IOException{ ByteArrayOutputStream out = new ByteArrayOutputStream(); wb.write(out); close(wb, out); return out.toByteArray(); }

 下載檔案呼叫方法:

  @SuppressWarnings("unchecked") public Map<String, Object> downloadFile(Map<String, Object> params,HttpServletRequest request,HttpServletResponse response) throws ParseException, UnsupportedEncodingException {

String url=“your called  address”;byte[] buffer = new byte[1024]; int len = -1; CloseableHttpClient httpClient = HttpClients.createDefault(); String jsonMap = comnSvc.mapToString(paramMap); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Content-type","application/json; charset=utf-8"); httpPost.setHeader("Accept", "application/json"); httpPost.setEntity(new StringEntity(jsonMap,"UTF-8")); try (CloseableHttpResponse httpResponse = httpClient.execute(httpPost); InputStream input = httpResponse.getEntity().getContent(); OutputStream output = response.getOutputStream();) { String tt= System.currentTimeMillis()+ ".xls"; String header = "attachment;filename="+ tt; //header="attachment;filename="+ URLEncoder.encode(oldFileName, "iso8859-1"); response.setHeader("Content-disposition", header); response.setContentType("application/vnd.ms-excel;charset=UTF-8");//xls 檔案;xml 為"text/xml; charset=UTF-8"  while((len=input.read(buffer))!=-1){ output.write(buffer, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }