题主的场景:
后端1服务有个下载接口响应输出流,前端1通过输出流调起网页的下载,实现文件下载功能。
此时,前端2服务想同样使用该下载功能,因此后端2服务需要透传后端1服务的输出流,给前端2服务使用。
java实现(使用feign):
@Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(value = 500))
@Override
public void scriptDownload(Long id, HttpServletResponse response) {
InputStream inputStream = null;
try {
feign.Response serviceResponse = feignClient.scriptDownload(id);
feign.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();
}
}
feign中需要注意传参:consumes = MediaType.APPLICATION_PROBLEM_JSON_VALUE
@GetMapping(value = "/download", consumes = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
feign.Response download(@RequestHeader Long id);