1:必须有一个form 作为接收的容器
2:控制器代码:
String filename = map.get("name").toString();
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
// 获取路径
String ctxPath = request.getSession().getServletContext().getRealPath("/")+ "\\" + "upload\\";
String downLoadPath = ctxPath + filename;
// 创建file对象
File file = new File(downLoadPath);
if (file.exists()) {
// 写明要下载的文件的大小
response.setContentLength((int) file.length());
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(file.getName(),"UTF-8"));
}else{
response.setStatus(404);
}
// 读出文件到i/o流
FileInputStream fis = new FileInputStream(file);
BufferedInputStream buff = new BufferedInputStream(fis);
byte[] b = new byte[1024];// 相当于我们的缓存
long k = 0;// 该值用于计算当前实际下载了多少字节
// 从response对象中得到输出流,准备下载
OutputStream myout = response.getOutputStream();
// 开始循环下载
while (k < file.length()) {
int j = buff.read(b, 0, 1024);
k += j;
// 将b中的数据写到客户端的内存
myout.write(b, 0, j);
}
// 将写入到客户端的内存的数据,刷新到磁盘
myout.flush();
logger.debug("upload over");
return null;
接下来看我的js 代码:
//下载
function f_download(name){
$("#name").val(name);
var form = $("#download");
form.attr("action","BsthJdJypxjlb/download.do");
form.submit();
}