批量下载
首先建立一个类
DbToExcel.Java
/**
* 下载
*/
public void dBToExcel1(List <Course> list,String[] titles, String file)
throws Exception {
WritableWorkbook wwb = null;
WritableSheet ws = null;
wwb = Workbook.createWorkbook(new File(file));
ws = wwb.createSheet("sheet1", 0);
for (int i = 0; i < titles.length; i++) {
ws.addCell(new Label(i, 0, titles[i]));
}
int count = 1;
Course course=new Course();
for(int i=0;i<list.size();i++){
course=list.get(i);
ws.addCell(new Label(0, i+1,String.valueOf(course.getId())));
ws.addCell(new Label(1, i+1,course.getName() ));
ws.addCell(new Label(2, i+1,String.valueOf(course.getHour() )));
//(0,i)对应表格的第1行第i列
}
wwb.write();
if (wwb != null)
wwb.close();
}
Dao层:
<select id="findCourse1" resultType="course" parameterType="course">
select * from tb_course
<where>
<if test="name!=null and name!=''">
<bind name="pattern_name" value="'%'+_parameter.getName()+'%'" />
name like #{pattern_name}
</if>
<if test="hour!=null and hour!=0 and hour!=''">
and hour=#{hour}
</if>
</where>
</select>
public List<Course> findCourse1(RowBounds rowBounds,Course course);
服务层:
public Page<Course> findCoursePage(Integer page,Integer rows, Course course);
@Override
public Page<Course> findCoursePage(Integer page, Integer rows) {
// TODO Auto-generated method stub
RowBounds rowBounds = new RowBounds((page-1) * rows, rows);
// // 查询列表
List<Course> courses =courseDao.findCourse(rowBounds);
//
//
// // 查询课程列表总记录数
Integer count = courseDao.findCourseCount();
// // 创建Page返回对象
Page<Course> result = new Page<Course>();
result.setPage(page);
result.setRows(courses);
result.setSize(rows);
result.setTotal(count);
return result;
}
控制层
@Autowired
private CourseService courseService;
@Autowired
private DbToExcel dbToExcel1;
public DbToExcel getDbToExcel1() {
return dbToExcel1;
}
public void setDbToExcel1(DbToExcel dbToExcel1) {
this.dbToExcel1 = dbToExcel1;
}
/**
* 下载
*/
@RequestMapping("/downloadCourse.action")
public ResponseEntity<byte[]> downloadCourse(Model model,Integer[] courseId,HttpServletRequest request)throws Exception {
List<Course> courses=courseService.findCourseByIds(courseId);
String[] titles={"课程编号","课程名","学时"};
String path="D:/test/";
String filename="test.xls";
File filePath = new File(path);
try {
if (!filePath.exists()) {
filePath.mkdirs();
}
File testFile = new File(path+filename);
if(!testFile .exists()) {
testFile.createNewFile();
System.out.println("测试文件不存在");
}
dbToExcel1.dBToExcel1(courses,titles,path+filename);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(path+filename);
// 对文件名编码,防止中文文件乱码
filename = this.getFilename(request, filename);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
// 通知浏览器以下载的方式打开文件
headers.setContentDispositionFormData("attachment", filename);
// 定义以流的形式下载返回文件数据
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 使用Sring MVC框架的ResponseEntity对象封装返回下载数据
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
headers,HttpStatus.OK);
}
public String getFilename(HttpServletRequest request,
String filename) throws Exception {
// IE不同版本User-Agent中出现的关键词
String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
// 获取请求头代理信息
String userAgent = request.getHeader("User-Agent");
for (String keyWord : IEBrowserKeyWords) {
if (userAgent.contains(keyWord)) {
//IE内核浏览器,统一为UTF-8编码显示
return URLEncoder.encode(filename, "UTF-8");
}
}
//火狐等其它浏览器统一为ISO-8859-1编码显示
return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
}
前端调用:
<form action="${pageContext.request.contextPath }/downloadCourse.action" method="post">
<table class="table table-hover">
<thead>
<tr>
<th></th>
<th>课程编号</th>
<th>课程名字</th>
<th>课时</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<c:forEach var="course" items="${page.rows}" varStatus="status" >
<%-- <tr <c:if test="${status.count%2=='0'}">class="success"</c:if>> --%>
<tr>
<td><input type="checkbox" name="courseId" value="${course.id }"></td>
<td>
<c:out value="${course.id }"/>
</td>
<td>
<c:out value="${course.name }"/>
</td>
<td>
<c:out value="${course.hour }"/>
</td>
<td>
<a href="${pageContext.request.contextPath }/selectCourse1.action?courseId=${course.id }">选课 </a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="下载">
</form>