說明一點:因ajax發送不接收流的返回,所以彈框實現了,就不能發送ajax,但是不發ajax我們無法得到一些錯誤信息。所以在此我們第一步去校驗,如果校驗有問題,返回ajax接收。如果沒問題,我們再發送一次,直接發送一個地址。此時我們只需要彈框保存,其他的操作就不需要了。這個問題糾結了我好久,百度了很多說得好,但是沒有一個完整的例子。今天給大家發送我做的完整代碼供學習
/**
* NkBuyMainService
*/
myApp.factory('nikeBuyService', ['$resource', '$http', function($resource, $http) {
return new nikeBuyService($resource, $http);
}]);
function nikeBuyService(resource, http) {
/**
* 生成nike buy
*/
this.exportExcel = function(scope) {
console.log("...........nikeBuyService.exportExcel.start...........");
// window.location = "nikebuy/exportNikeBuyToExcel"
http({
method : 'GET',
url : "nikebuy/exportNikeBuyToExcel",
headers : {
'Content-Type' : undefined
},
}).success(function(data, status, headers, config) {
console.log("...........nikeBuyService.exportExcel.data..........." + data.resultCode);
var resultCode = data.resultCode;
if (resultCode === "200") {
window.location = "nikebuy/exportNikeBuyToLocal";
} else {
}
package cn.com.nike.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.com.nike.service.NikeBuyService;
import cn.com.nike.util.UtilDateTime;
import cn.com.nike.util.Constants.ConstantsData;
import cn.com.nike.util.Constants.ConstantsResult;
import cn.com.nike.util.common.ResultModel;
@Controller
@RequestMapping("/nikebuy")
public class NikeBuyController implements Serializable {
private static final long serialVersionUID = 2732216546553695880L;
private static final Logger log = LoggerFactory.getLogger(NikeBuyController.class);
@Resource
NikeBuyService nikeBuyService;
public static HttpServletResponse resp = null;
/**
* 導出nike_buy到本地
*
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value = "/exportNikeBuyToLocal", method = RequestMethod.GET)
@ResponseBody
public ResultModel exportNikeBuyToLocal(HttpServletRequest request, HttpServletResponse response) throws IOException {
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis()) + ".exportNikeBuyToExcel.start...");
long starC = System.currentTimeMillis();
XSSFWorkbook workbook = null;
OutputStream outstream = null;
try {
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.start..導出nikebuy到本地開始..");
long a = System.currentTimeMillis();
// excel文件流輸出到瀏覽器,選擇下載路徑
File f = new File(request.getSession().getServletContext().getRealPath("/")
+ ConstantsData.SYSTEM_NIKEBUY_PATH + ConstantsData.MODEL_Name + ConstantsData.CONS_SUFFIX_2007);
workbook = new XSSFWorkbook(new FileInputStream(f));
outstream = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + ConstantsData.MODEL_Name + "_"
+ UtilDateTime.nowDateToString() + ConstantsData.CONS_SUFFIX_2007);
response.setContentType("application/x-download");
workbook.write(outstream);
long b = System.currentTimeMillis();
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.end..導出nikebuy到本地結束,無異常,共耗時:{}....", (b - a));
} catch (Exception e) {// 發生不可預知異常,在此截獲異常信息,並返回客戶操作不成功
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, ConstantsResult.SERVICE_ERROR);
log.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exception...導出nike buy失敗", e);
return ConstantsResult.resultModel;
}
// 如果導出成功,封裝成功信息,客戶選擇下載路徑
ConstantsResult.setResultModel(ConstantsResult.SERVICE_SUCCESS_CODE, ConstantsResult.SERVICE_SUCCESS_MSG);
long endC = System.currentTimeMillis();
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis()) + ".exportNikeBuyToExcel.end..總耗時:{},出參={}",
(endC - starC), ConstantsResult.resultModel);
return ConstantsResult.resultModel;
}
/**
* 生成excel
*
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value = "/exportNikeBuyToExcel", method = RequestMethod.GET)
@ResponseBody
public ResultModel exportNikeBuyToExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis()) + ".exportNikeBuyToExcel.start...");
long starC = System.currentTimeMillis();
try {
// 檢查表是否存在,不存在直接返回錯誤信息
// if (nikeBuyService.checkDB()) {
// return ConstantsResult.resultModel;
// }
// 如果三張表都存在,執行導出nike buy到excel,如果導出不成功,直接返回錯誤信息
String path = request.getSession().getServletContext().getRealPath("/"); // 模板文件的相對路徑webapp/files/xlsprint/nikeBuy.xlsx
if (nikeBuyService.exportNikeBuyToExcel(path, response)) {
return ConstantsResult.resultModel;
}
} catch (Exception e) {// 發生不可預知異常,在此截獲異常信息,並返回客戶操作不成功
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, ConstantsResult.SERVICE_ERROR);
log.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exception...導出nike buy失敗", e);
return ConstantsResult.resultModel;
}
// 如果導出成功,封裝成功信息,客戶選擇下載路徑
ConstantsResult.setResultModel(ConstantsResult.SERVICE_SUCCESS_CODE, ConstantsResult.SERVICE_SUCCESS_MSG);
long endC = System.currentTimeMillis();
log.info(UtilDateTime.getTimestamp(System.currentTimeMillis()) + ".exportNikeBuyToExcel.end..總耗時:{},出參={}",
(endC - starC), ConstantsResult.resultModel);
return ConstantsResult.resultModel;
}
}
package cn.com.nike.service.impl;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import cn.com.nike.dao.EntityDao;
import cn.com.nike.service.NikeBuyService;
import cn.com.nike.util.UtilDateTime;
import cn.com.nike.util.UtilFile;
import cn.com.nike.util.UtilValidate;
import cn.com.nike.util.Constants.ConstantsData;
import cn.com.nike.util.Constants.ConstantsResult;
@SuppressWarnings("rawtypes")
@Service("nikeBuyService")
public class NikeBuyServiceImpl implements NikeBuyService {
private static final Logger logger = LoggerFactory.getLogger(NikeBuyServiceImpl.class);
List list = null;
@Resource
private EntityDao entityDao;
/**
* 導出nike buy到excel
*
* @throws Exception
*
* @throws FileNotFoundException
*/
public boolean exportNikeBuyToExcel(String path, HttpServletResponse response) throws Exception {
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportNikeBuyToExcel.start...");
long start = System.currentTimeMillis();
try {
// 數據庫讀取數據,如果數據列表為空,返回結果信息,如果不為空,繼續以下操作
if (this.getNikeBuyData()) {
return true;
}
// 循環讀取數據生成excel,如果錯誤,直接返回錯誤結果
if (this.exportExcel(path, response)) {
return true;
}
} catch (Exception e) {// 如果發生未知異常,拋出異常,在controller中捕獲,並返回合理錯誤信息
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, e.getMessage());
logger.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportNikeBuyToExcel.exception.nikebuy導出異常.異常信息為={}", e);
throw new Exception(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportNikeBuyToExcel.exception.nikebuy導出異常.異常信息為={}", e);
} //
long end = System.currentTimeMillis();
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportNikeBuyToExcel.end.導出excel成功,共耗時={}", (end - start));
return false;
}
/**
* 生成excel文件
*
* @return
* @throws Exception
*/
private boolean exportExcel(String path, HttpServletResponse response) throws Exception {
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.start..生成nikebuy開始...path={}", path);
long start = System.currentTimeMillis();
InputStream is = null;
try {
is = new FileInputStream(new File(
path + ConstantsData.MODEL_PATH + ConstantsData.MODEL_Name + ConstantsData.CONS_SUFFIX_2007));
XSSFWorkbook workbook = new XSSFWorkbook(is);
XSSFSheet sheet = workbook.getSheetAt(0); // 獲取到第一個工作表
XSSFRow xssfRow = sheet.getRow(0);// 獲取第一行的總列數
int celCount = xssfRow.getLastCellNum();
for (int rowNum = 4; rowNum < list.size() + 4; rowNum++) {
Map dataMap = (Map) list.get(rowNum - 4);
XSSFRow row = sheet.createRow(rowNum);
for (int i = 0; i < celCount; i++) {
XSSFCell cell = row.createCell(i, XSSFCell.CELL_TYPE_STRING);
cell.setCellValue(dataMap.get(i) + "");
}
}
// 保存excel到服務器,上傳ftp時使用
this.saveFileToLocal(path, workbook);
} catch (Exception e) {
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, e.getMessage());
logger.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.exception.生成nikebuy異常.異常信息為={}", e);
throw new Exception(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.exception.生成nikebuy異常.異常信息為={}", e);
}
long end = System.currentTimeMillis();
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.exportExcel.end..生成nikebuy無異常..共耗時={}", (end - start));
return false;
}
/**
* 將生成的excel存入服務器,供發送ftp時使用 exePah + ConstantsData.MODEL_Name + "_" +
* UtilDateTime.nowDateToString() + ConstantsData.CONS_SUFFIX_2007
*
* @throws Exception
*/
private void saveFileToLocal(String path, XSSFWorkbook workbook) throws Exception {
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.saveFileToLocal.start..保存nikebuy到服務器開始...path={}", path);
long start = System.currentTimeMillis();
FileOutputStream out = null;
try {
String exePah = path + ConstantsData.SYSTEM_NIKEBUY_PATH;
// 刪除文件
UtilFile.deleteFile(new File(exePah));
// 存入服務器(上傳時用)
out = new FileOutputStream(new File(exePah + ConstantsData.MODEL_Name + ConstantsData.CONS_SUFFIX_2007));
workbook.write(out);
} catch (Exception e) {
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, e.getMessage());
logger.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.saveFileToLocal.exception.保存nikebuy到服務器.異常信息為={}", e);
throw new Exception(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.saveFileToLocal.exception.保存nikebuy到服務器異常.異常信息為={}", e);
} finally {
if (out != null) {
out.flush();
out.close();
}
}
long end = System.currentTimeMillis();
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.saveFileToLocal.end..保存nikebuy到服務器結束..無異常,共耗時:{}", (end - start));
}
/**
* 數據庫獲取nikebuy要導出的數據
*
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
private boolean getNikeBuyData() throws Exception {
list = new ArrayList();// 數據庫讀取的nikebuy數據
long star = System.currentTimeMillis();
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.getNikeBuyData.start........");
try {
Map map = new HashMap();
for (int i = 0; i < 200; i++) {
map.put(i, "aa");
}
list.add(map);
} catch (Exception e) {
logger.debug(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.getNikeBuyData.exception....nikebuy查詢數據庫異常,異常信息為:{}", e);
throw new Exception(UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.getNikeBuyData.exception....nikebuy查詢數據庫異常,異常信息為:{}", e);
}
if (UtilValidate.isEmpty(list)) {
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, ConstantsResult.CEL_NULL_ERROR);// 這種情況(除查詢語句錯誤以外)基本不存在
return true;
}
long end = System.currentTimeMillis();
logger.info(
UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.getNikeBuyData.end.....獲取nikebuy成功,數據共{}條,耗時:{}",
list.size(), (end - star));
return false;
}
/**
* 檢查三個表是否存在 Buy Plan,QAP,Size Master
*/
@Override
public boolean checkDB() {
long starS = System.currentTimeMillis();
logger.info(UtilDateTime.getTimestamp(System.currentTimeMillis()) + ".exportNikeBuyToExcel.checkDB.start.");
StringBuffer buffer = new StringBuffer();
int flag = 0;
try {
// 檢查Buy Plan
if (!entityDao.exindex(ConstantsData.SIZEMASTER_DB_NAME)) {
buffer.append("Buy Plan");
flag = 1;
}
// 檢查QAP
if (!entityDao.exindex(ConstantsData.QAP_DB_NAME)) {
if (flag == 1) {
buffer.append("AND");
} else {
flag = 1;
}
buffer.append("QAP");
}
// 檢查Size Master
if (!entityDao.exindex("sizemaster")) {
if (flag == 1) {
buffer.append("AND");
} else {
flag = 1;
}
buffer.append("Size Master");
}
if (flag == 1) {
buffer.append("\thave not import");
ConstantsResult.setResultModel(ConstantsResult.SERVICE_ERROR_CODE, buffer.toString());
return true;
}
} catch (Exception e) {
}
long endS = System.currentTimeMillis();
logger.info(
UtilDateTime.getTimestamp(System.currentTimeMillis())
+ ".exportNikeBuyToExcel.checkDB.end.檢查三張表結果={},共耗時:{}",
ConstantsResult.resultModel, (endS - starS));
return false;
}
}// class end
}).error(function(data, status, headers, config) {
console.log("...........nikeBuyService.exportExcel.error...........");
})
console.log("...........nikeBuyService.exportExcel.end...........");
};
/**
* 發送nike buy到ftp
*/
this.sendNikeBuyToSTP = function(scope) {
// window.location = "nikebuy/exportNikeBuyToLocal";
};
};