直接上代码
@RequestMapping("/download")
@ResponseBody
public void download(@RequestParam("file") String fiileName,
HttpServletResponse response){
// 获取文件路径
String path = "D:\\"+fiileName;
File file = new File(path);
//判断文件是否存在
if (!file.exists()) {
return;
}
// 在响应头中设置以下内容
//下载的文件携带的名称
response.setHeader("Content-Disposition", "attachment;filename=" + fiileName);
//文件下载类型--二进制文件
response.setContentType("application/octet-stream");
try {
// 获取文件的输入流
FileInputStream fileInputStream = new FileInputStream(file);
byte[] filBin = new byte[fileInputStream.available()];
// 将字节流写入到字节数组中
fileInputStream.read(filBin);
// 关闭字节输入流
fileInputStream.close();
// 获取响应的输出流
OutputStream responseOS = response.getOutputStream();
// 将字节数组写入到输出流中
responseOS.write(filBin);
// 调用flush()写出所有缓冲的输出字节
responseOS.flush();
// 关闭响应输出流
responseOS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
运行效果
注意点:
1.要修改响应头中的Content-Type和Content-Disposition.