SpringCloud feignを使用してダウンロードファイルサービスを呼び出す
21856 ワード
カスタムディレクトリのタイトルをここに書きます消費者端末 feignクライアント プロバイダ端末 controller層 service層 消費者側
消費者側が返すタイプは、ResponseEntityです.
Feignクライアント
Feignクライアントの戻り値は、HttpServeretResponse import feignではなく、feignが提供するResponseであることに注意する必要がある.Response;
プロバイダ側
コントロール層
サービス層
消費者側が返すタイプは、ResponseEntityです.
/**
*
*
* @return
* @throws Exception
*/
@RequestMapping(value = {"/HandboardAction/DownTreeTemplate"}, method = {RequestMethod.GET}, produces = {"application/json"})
public ResponseEntity<byte[]> downTreeTemplate(HttpServletResponse dresponse) throws Exception {
System.err.println(" 》》》》》");
ResponseEntity<byte[]> result = null;
// feign
Response response = TreeService.downTreeTemplate();
Response.Body body = response.body();
try (InputStream inputStream = body.asInputStream();) {
// ,
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[10240];
while (true) {
int len = inputStream.read(buf);
if (len < 0) {
break;
}
bos.write(buf, 0, len);
}
// , ResponseEntity
byte[] by = bos.toByteArray();
System.err.println(" :" + by.length);
//
HttpHeaders heads = new HttpHeaders();
heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + new String("text.xls".getBytes(), "ISO8859-1"));
heads.add(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel;charset=utf-8");
result = new ResponseEntity<byte[]>(by, heads, HttpStatus.OK);
} catch (IOException e) {
e.printStackTrace();
}
System.err.println(" 》》》》》");
return result;
}
Feignクライアント
Feignクライアントの戻り値は、HttpServeretResponse import feignではなく、feignが提供するResponseであることに注意する必要がある.Response;
/**
*
* @return
*/
@RequestMapping(value = "/downTreeTemplate",method = {RequestMethod.GET},produces = {"application/json"})
Response downTreeTemplate();
プロバイダ側
コントロール層
@RequestMapping(value = {"/downTreeTemplate"}, method = {RequestMethod.GET})
public void downTreeTemplate(HttpServletResponse response) {
System.err.println(" 》》》》》》");
treeService.downTreeTemplate(response);
System.err.println(" 》》》》》》");
}
サービス層
/**
*
*
* @param response
* @return
*/
public void downTreeTemplate( HttpServletResponse response) {
try {
String filename = "text.xls";
File downloadFile = new File("d:/com/"+filename);
download(response,downloadFile,filename);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*
* @param response
* @param downloadFile
* @param fileName
* @throws IOException
*/
public static void download(final HttpServletResponse response, final File downloadFile, final String fileName) throws IOException {
final File downloadFileTep = downloadFile;
if (!downloadFileTep.exists()) {
System.err.println(" 》》》》》》》》》》");
response.sendError(404, "File not found!");
return;
}
try (final BufferedInputStream bufferStream = new BufferedInputStream(new FileInputStream(downloadFileTep))) {
final byte[] buf = new byte[2048];
int len;
response.reset();
// response.setContentType("application/x-msdownload");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;" +
"filename=" + new String(fileName.getBytes(), "ISO8859-1"));//
final OutputStream out = response.getOutputStream();
int size =0;
while ((len = bufferStream.read(buf)) > 0) {
out.write(buf, 0, len);
size += len;
System.err.println(" :"+size);
}
bufferStream.close();
out.close();
}
}