java用流下载文件
请看用流下载文件的常规方法:
@RequestMapping("/fileDownLoad")
public void fileDownLoad(HttpServletResponse response, @RequestParam("id") Long id) {
log.info("……fileDownLoad………start………");
if (null == id) {
return;
}
FileUploadRecord fileUploadRecord = iFileUploadRecordService.selectFileUploadRecordById(id);
String Address = fileUploadRecord.getFileAddress();
String filenamedisplay = null;
filenamedisplay = Address.substring(Address.lastIndexOf(File.separator) + 1);
log.info("文件名称为:" + filenamedisplay);
File file = new File(Address);
if (file.exists()) {
OutputStream os = null; // 输出流
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[in.available()];
in.read(buffer);
in.close();
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(filenamedisplay.getBytes(), "iso-8859-1"));
os = new BufferedOutputStream(response.getOutputStream());
os.write(buffer);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != os) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
这里注意:①下载内容编码格式response.setCharacterEncoding(“utf-8”);
②文件名有中文的话显示不出来,请看这里的处理办法: response.setHeader(“Content-Disposition”, “attachment;fileName=” + new String(filenamedisplay.getBytes(), “iso-8859-1”));
这样就能下载显示中文名称的文件了