本地操作系统是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 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 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 readList(List 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(baos.toByteArray(),headers,HttpStatus.OK);
}