package com.ucap.netcheck.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.ucap.netcheck.entity.Site;
import com.ucap.netcheck.entity.User;
import com.ucap.netcheck.service.IReport2WordService;
import com.ucap.netcheck.service.ISiteService;
import com.ucap.netcheck.utils.DateUtil;
import com.ucap.netcheck.utils.FreeMarkerUtil;
/**
* @Title: Report2WordController.java
* @Package com.ucap.netcheck.controller
* @Description:生成word部分的Controller
* @author Zuoquan Tu
* @date 2015-4-12上午9:36:43
* @version V1.0
*/
@Controller
@RequestMapping(value = "/reportToWord", method = { RequestMethod.GET,
RequestMethod.POST })
public class Report2WordController {
@Autowired
private IReport2WordService report2WordService;
@Autowired
private ISiteService siteService;
@RequestMapping(value = "/word")
public String outWord(Model model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
//获取innerUUID,taskId
String siteCode = request.getParameter("innerUUID");
//获取taskId
Integer taskId = Integer.parseInt(request.getParameter("taskId"));
//获取用户的userId
User user = (User) request.getSession().getAttribute("user");
//通过下面的方式获得模板的参数
Site site = siteService.findSite(siteCode);
String webSiteName = site.getWzmc();
Map map = report2WordService.generateWordData(siteCode,
taskId, user.getId());
//获取innerUUID,taskId
// Map map = new HashMap();
//获取innerUUID,taskId
// Map map = new HashMap();
// map.put("taskNum", "测试");
// map.put("tackRunNum", "测试2……rqwrqw");
// String imageStr = new FreeMarkerUtil().getImageString("D:/1.png");
// map.put("imgStr", imageStr);
//
// List newsList = new ArrayList();
// for (int i = 0; i < 10; i++) {
// CheckService checkService = new CheckService();
// checkService.setTaskRunNum(10);
// checkService.setTaskNum(1000);
// newsList.add(checkService);
// }
// map.put("newList", newsList);
this.generateWord(request,response, map, webSiteName);
return null;
}
@SuppressWarnings("static-access")
private void generateWord(HttpServletRequest request,HttpServletResponse response,
Map map, String webSiteName)
throws FileNotFoundException, IOException {
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
try {
//调用工具类WordGenerator的createDoc方法生成Word文档
file = new FreeMarkerUtil().createDoc(map, "word");
fin = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
//设置浏览器以下载的方式处理该文件默认名为下面的文件,按照时间来生成的一个文件名称
String longMsDateStr = DateUtil.getStringLongMsDate();
String fileName = webSiteName + "_" + longMsDateStr + ".doc";
//设置下载用的文件名
setFileDownloadHeader(request, response, fileName);
//response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
out = response.getOutputStream();
byte[] buffer = new byte[512];
int bytesToRead = -1;
//通过循环将读入的Word文件的内容输出到浏览器中
while ((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} finally {
if (fin != null)
fin.close();
if (out != null)
out.close();
if (file != null)
file.delete(); //删除临时文件
}
}
/**
*根据当前用户的浏览器不同,对文件的名字进行不同的编码设置,从而解决不同浏览器下文件名中文乱码问题
*/
public static void setFileDownloadHeader(HttpServletRequest request,
HttpServletResponse response, String fileName) {
final String userAgent = request.getHeader("USER-AGENT");
try {
String finalFileName = null;
if (StringUtils.contains(userAgent, "MSIE")) {
// IE浏览器
finalFileName = URLEncoder.encode(fileName, "UTF8");
} else if (StringUtils.contains(userAgent, "Mozilla")) {
// google,火狐浏览器
finalFileName = new String(fileName.getBytes(), "ISO8859-1");
} else {
//其他浏览器
finalFileName = URLEncoder.encode(fileName, "UTF8");
}
//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开
response.setHeader("Content-Disposition", "attachment; filename=\""
+ finalFileName + "\"");
} catch (Exception e) {
e.printStackTrace();
}
}
}