一、传入HttpServletResponse用于封装响应
public void download(@Context HttpServletResponse response);
二、从第三方接口获取数据流
public void downloadReport(OutputStream reportOutput) throws Exception {
HttpClient httpClient = new HttpClient("url").method(HttpClient.GET).setResponseOutput(reportOutput);
}
三、将IO输出流转为输入流并存入响应
import org.apache.commons.io.IOUtils;
public void downloadReport(String fileName,ByteArrayOutputStream outputStream,HttpServletResponse response) throws Exception {
InputStream input = null;
try {
input = new ByteArrayInputStream(outputStream.toByteArray());
response.reset();
response.setContentType(MediaType.APPLICATION_OCTET_STREAM);
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition", "attachment; filename=\""+ new String(fileName.getBytes("UTF-8"), "iso8859-1") + "\"");
IOUtils.copyLarge(input, response.getOutputStream());
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();
} finally {
IOUtils.closeQuietly(input);
}
}