直接上代码
@RequestMapping("download")
@ResponseBody
public void downloadChapter(HttpServletRequest request,HttpServletResponse response,String musicName) throws Exception{
//首先为了保险起见,打印一接收的文件名
System.out.println(musicName);
//根据相对路径获取绝对路径
String realPath = request.getSession().getServletContext().getRealPath("/cmfz/show/album/music");
//new一个文件
File file = new File(realPath,musicName);
//设置响应头
//Content-disposition 是 MIME 协议的扩展它会激活文件下载对话框
//attachment是下载文件,如果需要在线预览的话修改成inline filename就是文件下载时保存的文件名
//new String(musicName.getBytes("UTF-8"),"ISO8859-1")如果不加这个的话下载后的文件名有中文的话会出现乱码,文件下载的时候默认使用的ISO8859-1编码格式,需要手动改成UTF-8的格式
response.setHeader("Content-Disposition", "attachment;filename="+new String(musicName.getBytes("UTF-8"),"ISO8859-1"));
//声明一个输出流
ServletOutputStream os = null;
try {
//初始化刚才定义的输出流
os = response.getOutputStream();
//文件拷贝,也是文件下载
FileUtils.copyFile(file, os);
} catch (Exception e) {
e.printStackTrace();
}finally{
//输出流使用完毕之后将其关闭
if(os != null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
关于@RequestMapping()和@ResponseBody这两个注解的作用,在上一篇博客springMVC的文件上传中进行了详细的解释