本地操作系統是windows ,測試/生產服務器是linux系統。svn 只是一個代碼版本控制,類似於文件服務器,把代碼都放在svn上管理。發版就從svn上更新到最全的測試好的代碼,打成war包,發佈到 測試/生產服務器。
但是今天呢 在導出的時候遇到了一個問題,在本地可以導出,在生產服務器不能導出。後來發現是 系統不一樣導致的問題。具體實驗如下:
本地環境 windows系統
request.getServletContext().getRealPath("/")+"\template\FrameProList.xls"; //這個是windows版本
request.getServletContext().getRealPath("/")+“template/FrameProList.xls”; //這個是服務器版本,Linux系統
我發佈到生產的時候用的是本地windows版本,所以報錯找不到文件。所以需要改過來。
報錯:C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxxcrm/template\FrameProList.xls(No such file or directory)–linux系統
可以看出 Windows 路徑使用"/" , Linux路徑 使用 “”
自己又進行了一些實驗:
windows系統
C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web/template/FrameProList.xls
這種其實也是可以的,把路徑粘貼到 本地路徑進行搜索,依然找得到,enter的一瞬間,windows系統會把單個的“\”轉換爲
“/”,所以可以找到文件。但是 xxxxx.crm.web/template 這種,windows系統就無法轉換,只能轉換單個。具體可以自己在電腦上測試。
結果放下面:
request.getServletContext().getRealPath("/")+"\template\FrameProList.xls"; //本地windows版本
C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web\template\FrameProList.xls
=C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web+\template\FrameProList.xls
可以訪問到文件
我改成這樣:
request.getServletContext().getRealPath("/")+"/template/FrameProList.xls"; //本地windows版本
C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web/template/FrameProList.xls
=C:\katerYi_work\apache-tomcat-7.0\webapps\xxxxx.crm.web+/template/FrameProList.xls
這樣竟然也可以訪問到。但是把路徑抽出來,放到本地搜索,是搜不出來的。這個不明白。
具體代碼如下:
/**
*導出產品清單數據信息--產品清單
*/
@RequestMapping("exportProList.do")
@ResponseBody
public ResponseEntity<byte[]> out( FrameAgreementProListModel model ,HttpServletRequest request,HttpServletResponse response )throws Exception{
if(StringUtils.isNotNullOrEmptyStr(model.getFrameId())){
throw new ExceptionWithCode("frame.0001");//請提供框架Id
}
//查詢當前框架下的產品清單列表
model.setLoginName(SystemUtils.getUserModel().getLoginName());
model.setPageSize(100000);
List<FrameAgreementProListModel > proList = mapper.selectFrameProList(model);
//指明-導出文件的模板
String templateFile = request.getServletContext().getRealPath("/")+“template/FrameProlist.xls”;//服務器版本-linux系統
//String templateFile = request.getServletContext().getRealPath("/")+“\\template\\FrameProlist.xls”;//本地windows版本
logger.info("模板文件路徑爲:"+templateFile);
//框架方法:導出方法------把list列表數據讀取到Excel模板文件中。
return readList(proList, templateFile);
}
/**
*list--Excel
*/
public ResponseEntity<byte[]> readList(List<FrameAgreementProListModel > list,String templateFile)throws Exception{
//如何把一個list數據讀取到一個Excel文件中
//1:獲取Excel文件對象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Workbook wb = Workbook.getWorkbook(new File( templateFile ));
WritableWorkbook wwb = Workbook.createWorkbook(baos,wb);
try{ WritableSheet sheet = wwb.getSheet(0);
Cell cell1 = ExcelUtils.getCellByValue(sheet,"行號");
Cell cell2 = ExcelUtils.getCellByValue(sheet,"產品名稱");
Cell cell3 = ExcelUtils.getCellByValue(sheet,"內部型號");
Cell cell4 = ExcelUtils.getCellByValue(sheet,"外部型號");
Cell cell5 = ExcelUtils.getCellByValue(sheet,"物料號");
Cell cell6 = ExcelUtils.getCellByValue(sheet,"數量");
Cell cell7 = ExcelUtils.getCellByValue(sheet,"意向單價");
Cell cell8 = ExcelUtils.getCellByValue(sheet,"實際質保期");
Cell cell9 = ExcelUtils.getCellByValue(sheet,"標準質保期");
Cell cell10 = ExcelUtils.getCellByValue(sheet,"單產品毛利");
int row_i = cell1.getRow(); //0
for(FrameAgreementProListModel model : list){
row_i++;
Label label1 = new Label( cell1.getColumn(),row_i,String.format("%d",row_i) );
Label label2 = new Label( cell2.getColumn(),row_i,model.getProName() );
Label label3 = new Label( cell3.getColumn(),row_i,model.getInnerNum() );
Label label4 = new Label( cell4.getColumn(),row_i,model.getOuterNum() );
Label label5 = new Label( cell5.getColumn(),row_i,model.getPartNum() );
Label label6 = new Label( cell6.getColumn(),row_i,model.getQuantity() );
Label label7 = new Label( cell7.getColumn(),row_i,model.getSalesPrice() );
Label label8 = new Label( cell8.getColumn(),row_i,model.getActualWP() );
Label label9 = new Label( cell9.getColumn(),row_i,model.getStandardWP() );
Label label10 = new Label( cell10.getColumn(),row_i,model.getGrossCal() );
sheet.addCell(label1);
sheet.addCell(label2);
sheet.addCell(label3);
sheet.addCell(label4);
sheet.addCell(label5);
sheet.addCell(label6);
sheet.addCell(label7);
sheet.addCell(label8);
sheet.addCell(label9);
sheet.addCell(label10);
}
}finally{
wwb.write();
wwb.close();
wb.close();
baos.close()
}
//設置導出的Excel文件名
HttpHeaders headers = new HttpHeaders();
headers.setContentType(Media.APPLICATION_OCTET_STREAM);
headers.add("Content-disposition","attachment;filename="+URLEncoder.encode(String.format("%s.xls",SystemUtils.getMessages().get("frame.sheet")),"utf-8" ));
return new ResponseEntity<byte[]>(baos.toByteArray(),headers,HttpStatus.OK);
}