今天做文件下载功能碰到的一个问题
用ajax进行文件下载,代码没有问题就是文件不下下来
百度查了一下才知道ajax返回时会把返回头字符串格式化
所以建议使用原生的jQuery的表单提在这里插入代码片交
前台页面
<form class="layui-form layui-form-pane" id="exportForm">
<div class="layui-form-item">
<label class="layui-form-label">起始日期</label>
<div class="layui-input-inline">
<input type="text" name="start" id="start" autocomplete="off"
placeholder="yyyy/MM/dd" class="layui-input">
</div>
<label class="layui-form-label">截止日期</label>
<div class="layui-input-inline">
<input type="text" name="end" id="end" autocomplete="off"
placeholder="yyyy/MM/dd" class="layui-input">
</div>
<label class="layui-form-label">部门</label>
<div class="layui-input-inline">
<select name="d_id1" id="d_id1">
</select>
</div>
<button type="submit" class="layui-btn" lay-submit=""
lay-filter="export">导出考勤表</button>
</div>
</form>
js文件
function exportAttendance(){
$("#exportForm").attr("action","../attendance/export");
$("#exportForm").submit();
}
后台页面
//设置返回头是点击下载并弹出下载框
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "UTF-8"));
//获取下载的文件并读取到文件输入流中
FileInputStream fis=new FileInputStream(context.getRealPath("考勤模板/"+filename));
//获取返回头的输出流,将文件写入输出流并返回给页面进行下载
ServletOutputStream os = response.getOutputStream();
byte[] bs=new byte[1024*10];
int len=-1;
while((len=fis.read(bs))!=-1) {
os.write(bs, 0, len);
}
//关闭流
fis.close();
os.close();