后端:
(MAXSIZE=10*1024*1024)
//发送二进制文件:
ServletOutputStream out=null;
FileInputStream ips = null;
try{
File file = new File("H:\\test.xlsx");
if (!file.exists()){
return;
}else{
ips=new FileInputStream(file);
//resp.setContentType("multipart/form-data");
resp.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("发展一栏.xlsx","utf-8"));
out=resp.getOutputStream();
int len=0;
byte[] buffer = new byte[MAXSIZE];
while ((len = ips.read(buffer))!=-1){
out.write(buffer,0,len);
}
out.flush();
}
}
catch (Exception e){
e.printStackTrace();
}finally {
try{
out.close();
ips.close();
}catch (Exception e){
e.printStackTrace();
}
}
前端:
之前太过于依赖ajax,但是这篇博客https://blog.csdn.net/moliyiran/article/details/90519501
告诉咱下载文件时不可以用ajax哒~~
所以按照帖子换成表单的方法:
function OnLoad() {
/*$.ajax({
type:"POST",
url:"/downLoadExsl",
dataType:"json",
data:{
},
success:function (data, status, xhr) {
console.log("Download file DONE!");
console.log(data); // ajax方式请求的数据只能存放在javascipt内存空间,可以通过javascript访问,但是无法保存到硬盘
console.log(status);
console.log(xhr);
console.log("=====================");
}
});*/ //AJAX没有用啦~~~
console.log("ajaxDownloadSynchronized");
var url = "http://localhost:80/downLoadExsl";
var fileName = "党员发展一览.xlsx";
//这个好像是没用的 因为后台传的时候指定了文件名
var form = $("<form></form>").attr("action", url).attr("method", "post");
form.append($("<input></input>").attr("type", "hidden").attr("name", "fileName").attr("value", fileName));
form.appendTo('body').submit().remove();
}