@Around("responseBody()")返回值为ByteArrayInputStream,如何进行下载
时间: 2023-02-08 07:02:10 浏览: 87
关于@ResponseBody 默认输出的误区的解答
可以使用HttpServletResponse对象的方法将ByteArrayInputStream写入response的输出流中,然后设置response的header信息,如Content-Disposition、Content-Type等,最后调用response的flushBuffer()方法将数据发送到客户端进行下载。
代码示例:
```
@Around("responseBody()")
public Object handleResponseBody(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
if(result instanceof ByteArrayInputStream){
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=downloadFileName.xxx");
IOUtils.copy((InputStream) result, response.getOutputStream());
response.flushBuffer();
}
return result;
}
```
其中,Content-Disposition 和 Content-Type 为必须设置的参数,filename 是文件名,xxx 是文件类型。
IOUtils.copy((InputStream) result, response.getOutputStream()); 这一行是将返回的 ByteArrayInputStream 数据写入到 response 的输出流中。
response.flushBuffer() 这一行是将数据发送到客户端进行下载。
阅读全文