js部分代码:
//开启下载
window.location.href = "wechatrelease/download?url=" + url;
Java部分代码:
@ResponseBody
@RequestMapping("/download")
public void download(HttpServletRequest request, HttpServletResponse response) {
try {
String url = request.getParameter("url");
String filepath = uploadUrl + url.substring(7); //此处由于项目路径特殊,做了路径拼接,可忽略
filepath = filepath.replace("/", "\\");
// 弹出下载选项
DownloadUtil.dataUpload(filepath, "", request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
DownloadUtil工具类
public class DownloadUtil {
public static HttpServletResponse dataUpload(String fileSrc, String rename, HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html; charset=UTF-8");
try {
File file = new File(fileSrc);
// 取得文件名。
String filename = file.getName();
if (!ToolsUtil.isEmpty(rename)) {
filename = rename;
}
String agent = request.getHeader("USER-AGENT");
if (null != agent && -1 != agent.indexOf("MSIE") || null != agent && -1 != agent.indexOf("Trident")) {// ie
String name = java.net.URLEncoder.encode(filename, "UTF8");
filename = name;
} else if (null != agent && -1 != agent.indexOf("Mozilla")) {// 火狐,chrome等
filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");
}
// 取得文件的后缀名。
// String ext = filename.substring(filename.lastIndexOf(".") +
// 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
response.addHeader("Content-Length", "" + file.length());
OutputStream out = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
out.write(buffer);
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}
}