由于用户需要将内容导出到excel然后下载,虽然产生本地文件然后用FileInputStream和FileOutputStream下载到用户端,但是这样服务器就产生了很多无用文件。所以最后方式是内容导出后直接把文件提供给用户下载。
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Location",fileName);
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
ByteArrayOutputStream os = new ByteArrayOutputStream();
workbook.write(os);
byte[] content = os.toByteArray();
InputStream is = new ByteArrayInputStream(content);
ServletOutputStream out = response.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
// Simple read/write loop.
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (final IOException e) {
throw e;
} finally {
if (bis != null) {
bis.close();
}
if (bos != null){
bos.close();
}
}
```
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
// 下载文件能正常显示中文
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
```
如果是产生到服务器端,然后提供用户下载将上面的改成FileInputStream和FileOutputStram即可