private void download(HttpServletResponse response, String filename) {
// 发送给客户端的数据
OutputStream outputStream = null;
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
File file = new File(filename);
logger.info(filename);
// 读取filename
try {
outputStream = response.getOutputStream();
if (!file.exists()) {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Result<Object> fail = ResultBuilder.fail(ResultCode.DOWNLOAD_FAIL);
outputStream.write(JSON.toJSONBytes(fail));
} else {
// 设置content-type,即告诉客户端所发送的数据属于什么类型
response.setContentType("application/vnd.ms-excel");
// 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。URLEncoder.encode解决中文乱码
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(this.removeFileNamePath(filename),"UTF-8"));
bis = new BufferedInputStream(new FileInputStream(file));
response.setHeader("Content-Length", String.valueOf(bis.available()));
int i = bis.read(buff);
while (i != -1) {
outputStream.write(buff, 0, buff.length);
outputStream.flush();
i = bis.read(buff);
}
}
} catch (IOException e) {
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Result<Object> fail = ResultBuilder.fail(ResultCode.DOWNLOAD_FAIL);
try {
outputStream.write(JSON.toJSONBytes(fail));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
java web实现文件下载功能
最新推荐文章于 2023-11-24 17:45:14 发布