1、js源码
//filepath为存储的路径
function downFile(filepath){
location.href="${path }/file/downFile?filepath="+filepath;
}
2、Controller源码
@RequestMapping(value="/downFile",method=RequestMethod.GET)
@ResponseBody
public void downFile(HttpServletRequest req,HttpServletResponse response,String filepath) {
String filePath = req.getSession().getServletContext().getRealPath("/uploadFiles/");
try {
FileUtil.download(filePath+"/"+filepath, response);
} catch (RuntimeException e) {
LOGGER.error("文件下载失败:{}", e);
}
}
3、工具类源码
package com.hezhikeji.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
/**
* 文件上传工具类
* @author ALu
*
*/
public class FileUtil {
/**
* 下载文件
* @param path
* @param response
* @return
*/
public static HttpServletResponse download(String path, HttpServletResponse response) {
try {
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
//String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
//response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
//此方法解决文件中文问题
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes("utf-8"),"iso8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}
}