package com.example.expense.expensereport.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.example.expense.entity.ExpenseReport; import com.example.expense.expensereport.service.ExpenseReportManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.PropUtils; @SuppressWarnings({ "unused" }) public class WebOffice extends HttpServlet { private static final long serialVersionUID = 1L; private static final String METHOD_POST = "post"; private static final String LOAD_FILE = "LOADFILE"; private static final String SAVE_FILE = "SAVEFILE"; private Log log = LogFactory.getLog(getClass()); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DBstep.iMsgServer2000 msgServer = new DBstep.iMsgServer2000(); try { if(METHOD_POST.equalsIgnoreCase(request.getMethod())) { msgServer.Load(request); processInfo(msgServer); }else{ addErrorMsg(msgServer, "请使用Post方法"); } } catch (Exception e) { log.debug(e); addErrorMsg(msgServer, "文件打开错误, 请联系管理员."); } sendPackage(msgServer,response); } /* * 处理iWebOffice控件信息 */ private void processInfo(DBstep.iMsgServer2000 msgServer) throws IOException{ if ("DBSTEP".equalsIgnoreCase(msgServer.GetMsgByName("DBSTEP"))) { // 如果是合法的信息包 Long recordId = Long.parseLong(msgServer.GetMsgByName("RECORDID")); String optionMessage = msgServer.GetMsgByName("OPTION"); if (LOAD_FILE.equalsIgnoreCase(optionMessage)) { // 查看文件 msgServer.MsgTextClear(); msgServer.MsgFileBody(loadFile(recordId)); // 将文件信息打包 msgServer.SetMsgByName("STATUS", "打开成功!"); // 设置状态信息 msgServer.MsgError(""); // 清除错误信息 }else if (SAVE_FILE.equalsIgnoreCase(optionMessage)) { // 保存文件 saveFile(msgServer, recordId); } }else{ addErrorMsg(msgServer, "客户端发送数据包错误!"); } } private byte[] loadFile(Long recordId) throws IOException{ ExpenseReportManager expenseReportManager = (ExpenseReportManager) ContextUtils.getBean("expenseReportManager"); ExpenseReport expenseReport = expenseReportManager.getExpenseReport(recordId); // return FileUtils.readFileToByteArray(new File(expenseReport.getFilePath())); return ApiFactory.getFileService().getFile(expenseReport.getFilePath()); } private void saveTempFile(byte[] content,File file){ FileOutputStream fos=null; try { fos=new FileOutputStream(file); fos.write(content); }catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); }finally{ if(fos!=null) try { fos.close(); } catch (IOException e) { log.debug(PropUtils.getExceptionInfo(e)); } } } /** * 保存文件 * @param msgServer * @param recordId * @throws IOException */ private void saveFile(DBstep.iMsgServer2000 msgServer, Long recordId ){ msgServer.MsgTextClear(); int fileSize = msgServer.MsgFileSize(); //字节数 ExpenseReportManager expenseReportManager = (ExpenseReportManager) ContextUtils.getBean("expenseReportManager"); ExpenseReport expenseReport = expenseReportManager.getExpenseReport(recordId); msgServer.MsgFileSave(expenseReport.getFilePath()); expenseReportManager.saveExpenseReport(expenseReport); msgServer.SetMsgByName("STATUS", "保存成功!"); msgServer.MsgError(""); msgServer.MsgFileClear(); } /* * 为iWebOffice控件添加错误信息 */ private void addErrorMsg(DBstep.iMsgServer2000 msgServer, String msg){ msgServer.MsgError(msg); msgServer.MsgTextClear(); msgServer.MsgFileClear(); } /** * 发送处理后的数据包 * @param response */ private void sendPackage(DBstep.iMsgServer2000 msgServer,HttpServletResponse response) { try { response.getOutputStream().write(msgServer.MsgVariant()); response.getOutputStream().flush(); response.getOutputStream().close(); } catch (IOException e) { log.debug(e); } } }