Java操作Jxl实现数据交互。三部曲——《第三篇》
Java操作Jxl实现上传文本文件实现转PDF格式在线预览。
本文实现背景Web项目:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js、Css文件。页面:Jsp、拦截请求:Servlet、逻辑处理:ClassBean、数据库:SQLserver。
注意:Bean中操作SQL语句进行处理是公司内部方法,可替换为其它方法自行扩展!主要看代码逻辑业务处理!
首先我们看见的是Easyui中的datagrid中的数网格。
接下来进行创建一个xsl文本格式数据文件
我们任意点击条数据,点击附件这是弹出一个窗口让我们进行附件上传,只能上传文本数据格式!
点击保存附件上传成功!该附件信息文件名称及文件路径以保存在数据库中,查询该人员的相关信息及附件信息,此时此刻可查看附件信息
点击查看及可把xls数据格式在线转码为PDF格式数据进行展示!(注:在线转码与预览需要一些本地配置,请关注我下一篇博客!)
jsp代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.pantech.base.common.tools.MyTools"%> <%@ page import="com.pantech.base.common.tools.PublicTools"%> <%@ page import="com.pantech.src.develop.Logs.*"%> <%@ page import="com.pantech.base.common.tools.*"%> <%@ page import="com.pantech.src.develop.store.user.*"%> <%@ page import="com.pantech.src.develop.manage.workremind.WorkRemind"%> <%@ page import="java.util.Vector"%> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%> <%@ page import="com.pantech.base.common.db.DBSource"%> <html> <head> <title>导入文件转为FDF格式在线预览</title> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/themes/icon.css"> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/themes/default/easyui.css"> <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/bootstrap.css"/> <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/naber.css"/> <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/font-awesome/css/font-awesome.css"> <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/SMS-index.css"/> <link charset="utf-8" rel="stylesheet" href="<%=request.getContextPath()%>/css/listPage.css"/> <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/jquery.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/jquery.easyui.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/JQueryUI/locale/easyui-lang-zh_CN.js"></script> <script charset="utf-8" src="<%=request.getContextPath()%>/script/bootstrap.min.js"></script> <script charset="utf-8" src="<%=request.getContextPath()%>/script/layer/layer.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/clientScript.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/publicScript.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/ajaxfileupload.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/common/publicScript.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/FlexPaper/flexpaper_handlers.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/FlexPaper/flexpaper.js"></script> <style type="text/css"> #divPageMask2{background-color:#D2E0F2; filter:alpha(opacity=90);left:0px;top:0px;z-index:100;} #divPageMask3{background-color:#D2E0F2; filter:alpha(opacity=90);left:0px;top:0px;z-index:100;} #win td{height:30px;} </style> </head> <body class="easyui-layout" > <!-- 页面学生列表区 --> <div id="tableDIV" class="list-table table-responsive" style="height:600px;width: 900px"> <table id="list" width="100%"></table> </div> <!-- 上传附件弹窗 --> <div id=jxdialog style="overflow: hidden;"> <div id="north" region="north" title="教学管理"> <table id="tb"> <tr> <td><a href="#" id="newfjsc" class="easyui-linkbutton"plain="true" iconcls="icon-new" onClick="doToolbar(this.id);"title="">上传附件</a></td> <td><a href="#" id="delfjxx" class="easyui-linkbutton"plain="true" iconcls="icon-cancel" onClick="doToolbar(this.id);"title="">删除</a></td> </tr> </table> </div> <div region="center"> <table id="jxbzList"></table> </div> </div> <!-- 附件上传 --> <div id="jxbzInfo" style="overflow:hidden;"> <form id="form1" method='post'> <table style="width:100%;" class="tablestyle"> <tr> <td class="titlestyle">附件上传</td> <td> <input type="file" name="file1" id="icJXBZ_UPLOAD" style="width:280px;" /> </td> </tr> </table> <div style="display: none;"> <input type="hidden" id="active" name="active"/> </div> </form> </div> <!-- 遮罩层 --> <div id="ic_flexPaperZhezhao" style="position:absolute; z-index:99999; width:100%; height:100%; background-image:url('<%=request.getContextPath()%>/images/course/pic5.png'); display:none; text-align:center;" onclick="$('#ic_flexPaperDiv').hide();"> <font color="white" style="position:relative; top:45%; left:0;">文件预览加载中<br/><img src="<%=request.getContextPath()%>/images/course/loading.gif" /></font> </div> <!-- 文件预览 flexpaper --> <div id="ic_flexPaperDiv" style="position:absolute; z-index:99999; width:100%; height:100%; background-image:url('<%=request.getContextPath()%>/images/course/pic5.png'); display:none;" onclick="$('#ic_flexPaperDiv').hide();"> <div id="documentViewer" class="flexpaper_viewer" style="width:90%;height:90%; position:relative; top:5%; left:5%;"> </div> </div> </body> <script type="text/javascript"> var XSBH=''; var uploadPath='<%=MyTools.getProp(request, "Base.JYWDStandardUpLoadPath")%>';//上传路径 var filePreview='<%=MyTools.getProp(request, "Base.JYWDStandardFilePreview")%>';//预览路径 var iUSERCODE="<%=MyTools.getSessionUserCode(request)%>"; //获得用户登录code $(document).ready(function(){ loadGrid(); loadDialog(); }); //dialog窗口 function loadDialog() { //上传附件弹窗 $('#jxbzInfo').dialog({ width: 480,//宽度设置 height: 120,//高度设置 modal:true, closed: true, cache: false, draggable:false,//是否可移动dialog框设置 toolbar:[{ //保存编辑 text:'保存', iconCls:'icon-save', handler:function(){ //传入save值进入doToolbar方法,用于保存 doToolbar('savefjxx'); } }], //打开事件 onOpen:function(data){}, //读取事件 onLoad:function(data){}, //关闭事件 onClose:function(data){ //上传附件表单元素数据 var file = $('#icJXBZ_UPLOAD'); file.after(file.clone().val("")); file.remove(); jxloadGrid(Maindata[0].学生编号); //调用读取附件页面信息 } }); //上传教学附件 $('#jxdialog').dialog({ width: 800,//宽度设置 title:'教学管理计划', height: 480,//高度设置 modal:true, closed: true, cache: false, draggable:false,//是否可移动dialog框设置 //打开事件 onOpen:function(data){}, //读取事件 onLoad:function(data){}, //关闭事件 onClose:function(data){ iKeyCode=XSBH; } }); } //上传附件信息 function jxloadGrid(zy) { XSBH=zy; loadGridfjsc(zy); $('#jxdialog').dialog('open'); } //工具按钮 function doToolbar(iToolbar){ //判断获取参数为new,执行新建附件操作 if(iToolbar == 'newfjsc'){ $('#jxbzInfo').dialog('setTitle', '新建教学附件信息'); $('#jxbzInfo').dialog('open'); //打开dialog } //执行保存附件信息操作 if(iToolbar == 'savefjxx'){ if($('#icJXBZ_UPLOAD').val()==''){ alertMsg("请选择上传文件"); return; } var fileTypePhoto='<%=MyTools.getProp(request, "[FileTypePhoto]")%>'; //图片 var fileTypeTxt='<%=MyTools.getProp(request, "[FileTypeTxt]")%>'; //文本 var fileSuffix=$("#icJXBZ_UPLOAD").val().split('.')[$("#icJXBZ_UPLOAD").val().split('.').length-1]; //获取文件后缀名 if (fileTypeTxt.indexOf(fileSuffix)!=-1) { checkFile();//新建 }else { alertMsg("只能上传文本格式的文件"); return; } } //删除附件信息操作 if(iToolbar=="delfjxx"){ if(iKeyCode==""){ alertMsg("请先选择一行数据"); return; } ConfirmMsg("删除后,将无法恢复,是否继续?","delRec();",""); } } //删除附件信息方法 function delRec(){ $.ajax({ type:'post', url:"<%=request.getContextPath()%>/ImportTextBean_Servlet", data:"active=deleteRow&FJXXBH=" + iKeyCode, dataType:'json', success:function(datas){ if(datas[0].msg=="删除成功"){ showMsg(datas[0].msg); jxloadGrid(XSBH); //调用读取附件页面信息 } } }); } //加载datagrid主页面信息 function loadGrid(){ $('#list').datagrid({ url: '<%=request.getContextPath()%>/ImportTextBean_Servlet', queryParams: {"active":"loadElective"}, loadMsg : "信息加载中请稍后!",//载入时信息 nowrap: false,//当数据长度超出列宽时将会自动截取 showFooter:true, rownumbers: true, animate:true, striped : true,//隔行变色 pageSize : 10,//每页记录数 singleSelect : true,//单选模式 pageNumber : 20,//当前页码 pagination:true, fit:true, fitColumns: true,//设置边距 columns:[[ {field:'姓名',title:'姓名',width:fillsize(0.2)}, {field:'所在区域',title:'所在区域',width:fillsize(0.2)}, {field:'col3',title:'附件',width:fillsize(0.1), formatter:function(value,rec,index){ return "<input type='button' style='cursor:pointer;' value='[附件]' onclick='jxloadGrid(\""+rec.编号+"\");'> "; }} ]], onClickRow:function(rowIndex, rowData){ row=rowData; }, onLoadSuccess: function(data){ iKeyCode=''; }, onLoadError:function(none){ } }); } /* 学生个人附件信息列表数据 */ function loadGridfjsc(zy){ $('#jxbzList').datagrid({ url:'<%=request.getContextPath()%>/ImportTextBean_Servlet', queryParams:{"active":"queryList","XSBH" : zy}, loadMsg : "信息加载中请稍侯!", //载入时信息 title:'教学计划信息列表', width : '785px', //宽度 height : '500px', nowrap : false, //截取当数据长度超出列宽时会自动截取 fitColumns : true, //自适应列宽防止出现水平滚动 striped : true, //隔行变色 pagination : true, //分页 showFooter:true, //显示页脚信息 pageSize : 10, //每页记录数 singleSelect : true, //单选模式 这里是指只能选一行不能多选 pageNumber :1, //当前页码 rownumbers:true, columns:[[ //field为读取数据的数据名,title为显示的数据名,width宽度设置,align数字在表格中显示的位置 {field:'编号',title:'教学计划编号',hidden:true}, {field:'文件名',title:'文件名称',width:fillsize(0.12),align:'center'}, {field:'创建人',title:'上传人',width:fillsize(0.15),align:'center'}, {field:'创建时间',title:'上传时间',width:fillsize(0.15),align:'center'}, {field:'col3',title:'附件',width:fillsize(0.15),align:'center', formatter:function(value,rec,index){ return "<input type='button' style='cursor:pointer;' value='[查看]' onclick='decideFile(\""+rec.文件路径+"\",\""+rec.预览路径+"\",\""+index+"\");'>" }} ]], //单击某行时触发 onClickRow:function(rowIndex,rowData){ //主键赋值 iKeyCode = rowData.编号; curRowData = rowData; }, //加载成功后触发 onLoadSuccess: function(data){ iKeyCode = ''; curRowData = ''; Maindata=data; } }); }; /**检查上传文件*/ function checkFile(){ var filePath = $("#icJXBZ_UPLOAD").val(); var pattern = /^[^\s]*$/; var fname = filePath.substring(filePath.lastIndexOf("\\")+1, filePath.length); if(!pattern.test(fname)){//匹配文件名 alertMsg('文件名中不能有空格!',0); return; } var arr = filePath.split('\\'); var fileName = arr[arr.length-1]; if(filePath!=""){ uploadFile('icJXBZ_UPLOAD'); } } //上传附件请求方法 function uploadFile(fileId){ $.ajaxFileUpload({ url:'<%=request.getContextPath()%>/ImportTextBean_Servlet?active=uploadify&XSBH='+XSBH, //服务器地址 secureuri:false, /*type:"post", */ fileElementId:fileId,//文件选择框的id属性 dataType: 'text',//服务器返回的格式,可以是json success: function (data){//相当于java中try语句块的用法 if(data == '上传文件成功'){ //提示信息 showMsg('上传文件成功'); loadGridfjsc(XSBH); $('#jxbzInfo').dialog('close'); }else{ $('#jxbzInfo').dialog('close'); loadGridfjsc(JXSKJHMX_BH); alertMsg(data); } } }); } //预览的是图片还是文本进行处理 function decideFile(path, previewpath,index){ curRowData=Maindata.rows[index]; preview(path, previewpath);//文本 } //显示文本文件预览 function preview(path, previewpath){ $('#ic_flexPaperZhezhao').show(); var swfPath =filePreview+previewpath; $.ajax({ type: 'POST', url: '<%=request.getContextPath()%>/ImportTextBean_Servlet', data: 'active=fileToSwf&filePath='+path, //dataType: 'json', success: function(datas){ if(datas != '') { var json = eval("("+datas+")"); //判断文件是否转换成功 if(json[0].MSG == '转换成功'){ $('#documentViewer').FlexPaperViewer({ config : { //需要使用FlexPaper打开的文档 SWFFile : escape(swfPath), //初始化缩放比例 Scale : 1.0, //缩放样式,其他可选值包括:easenone,easeout,linear,easeoutquad ZoomTransition : 'easeout', //从一个缩放比例变为另外一个缩放比例需要花费的时间,该参数值应该为0或更大 ZoomTime : 0.5, //缩放比例之间间隔 ZoomInterval : 0.2, //初始化时自适应页面 FitPageOnLoad : false, //初始化时自适应页面宽度 FitWidthOnLoad : false, //当设置为true时,单击全屏按钮会打开一个FlexPaper最大化的新窗口而不是全屏,当由于flash播放器因为安全而禁止全屏,而使用flexpaper作为独立的flash播放器的时候设置为true是个优先选择 FullScreenAsMaxWindow : false, //当设置为true时,展示文档时不会加载完整个文档,而是逐步加载,但是需要将文档中转化为9以上的版本(使用pdf2swf的时候使用-T 9标签) ProgressiveLoading : false, //设置最小的缩放比例 MinZoomSize : 0.5, //设置最大的缩放比例 MaxZoomSize : 3, //设置为true时,单击搜索所有符合条件的地方高亮显示 SearchMatchAll : false, //设置启动模式如“Portrait”或“TowPage” InitViewMode : 'Portrait', RenderingOrder : 'flash', StartAtPage : '', //工具栏上是否显示样式选择框 ViewModeToolsVisible : true, //工具栏上时候显示缩放工具 ZoomToolsVisible : true, //工具栏上是否显示导航工具 NavToolsVisible : true, //工具栏上是否显示光标工具 CursorToolsVisible : true, //工具栏上是否显示搜索工具 SearchToolsVisible : false, WMode : 'window', //设置地区(语言) localeChain: 'zh_CN' } }); $('#ic_flexPaperZhezhao').hide(); $('#ic_flexPaperDiv').show(); }else if(json[0].MSG == '转换失败'){ //判断serverMsg值 if(json[0].serverMsg == 'openoffice服务未启动'){ alertMsg('openoffice服务已重新启动,点击确定后可重新预览!'); }else if(json[0].serverMsg == 'openofficeBat文件不存在'){ alertMsg('openoffice服务启动文件不存在,如有疑问请联系管理员!'); }else{ alertMsg('文件暂时无法预览,如有疑问请联系管理员!'); } $('#ic_flexPaperZhezhao').hide(); } } } }); } </script> </html>
Servlet代码:
package or.og.jxldemo; import java.io.IOException; import java.net.URLDecoder; import java.sql.SQLException; import java.util.Vector; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.pantech.base.common.exception.WrongSQLException; import com.pantech.base.common.tools.JsonUtil; import com.pantech.base.common.tools.MyTools; import com.pantech.base.common.tools.TraceLog; import net.sf.json.JSONArray; /** * Servlet implementation class ImportTextBean_Servlet */ public class ImportTextBean_Servlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置字符编码为UTF-8 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String active = MyTools.StrFiltr(request.getParameter("active"));// 拿取前台的active值 int pageNum = MyTools.parseInt(request.getParameter("page")); //获得页面page参数 分页 int pageSize = MyTools.parseInt(request.getParameter("rows")); //获得页面rows参数 分页 Vector jsonV = null;//返回结果集 JSONArray jal = null;//返回json对象 ImportTextBean bean = new ImportTextBean(request); this.getFormData(request, bean); //获取SUBMIT提交时的参数(AJAX适用) System.out.println("active:--"+active); //读取学生信息 if("loadElective".equalsIgnoreCase(active)){ try { jsonV = bean.loadElective(pageNum, pageSize); jal = (JSONArray)jsonV.get(2); response.getWriter().write("{\"total\":" + MyTools.StrFiltr(jsonV.get(0)) + ",\"rows\":" + jal.toString() + "}");//返回前台datagrid需要的数据格式 TraceLog.Trace("{\"total\":" + MyTools.StrFiltr(jsonV.get(0)) + ",\"rows\":" + jal.toString() + "}"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //查询附件信息表 if("queryList".equalsIgnoreCase(active)) { String XSBH =MyTools.StrFiltr(request.getParameter("XSBH")); //学生编号 try { jsonV = bean.queryList(XSBH); jal = (JSONArray)jsonV.get(2);//转化为JSON数据格式 response.getWriter().write(jal.toString());//返回数据到前台 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //上传附件请求方法 if("uploadify".equalsIgnoreCase(active)){ String XSBH =MyTools.StrFiltr(request.getParameter("XSBH")); //学生编号 String savePath = ""; savePath=MyTools.getProp(request, "Base.JYWDStandardUpLoadPath"); String savetestPath = MyTools.getProp(request, "Base.testPathFile"); System.out.println("--上传路径:"+savePath+"--文档类型:"); DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); upload.setHeaderEncoding("utf-8"); bean.uploadifyFile(savePath, request, response); //调用创建文件方法 if (bean.getMSG().equals("保存成功")) { try { bean.UploadToDB(request,XSBH); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (WrongSQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //调用插入数据方法 response.getWriter().write(bean.getMSG()); }else { response.getWriter().write(bean.getMSG()); } } //将word等文件转换成swf格式 if("fileToSwf".equalsIgnoreCase(active)){ String path = MyTools.StrFiltr(request.getParameter("filePath")); //文件路径 String filePath =path; Office2SWF o2s = new Office2SWF(request, filePath); boolean flag = o2s.conver(); if(flag){ jal = JsonUtil.addJsonParams(jal,"MSG", "转换成功"); }else{ jal = JsonUtil.addJsonParams(jal,"MSG", "转换失败"); if("openoffice服务未启动".equalsIgnoreCase(o2s.getMSG()) || "openofficeBat文件不存在".equalsIgnoreCase(o2s.getMSG())){ jal = JsonUtil.addJsonParams(jal, "serverMsg", o2s.getMSG()); } } response.getWriter().write(jal.toString()); } //删除附件信息表 if("deleteRow".equalsIgnoreCase(active)) { String FJXXBH = MyTools.StrFiltr(request.getParameter("FJXXBH")); //附件信息编号 try { //调用删除操作 bean.deleteRow(FJXXBH); //返回操作信息 jal=JsonUtil.addJsonParams(jal, "msg", bean.getMSG()); response.getWriter().write(jal.toString()); } catch (SQLException e) { e.printStackTrace(); jal = JsonUtil.addJsonParams(jal, "msg", "无法获取数据<br>"+bean.getMSG()); response.getWriter().write(jal.toString()); } catch (WrongSQLException e) { e.printStackTrace(); } } } /** * 从界面没获取参数 * @date * @author:yeq * @param request * @param MajorSetBean */ private void getFormData(HttpServletRequest request, ImportTextBean bean){ bean.setUSERCODE(MyTools.getSessionUserCode(request)); //USERCODE } }
Bean代码:
package or.og.jxldemo; import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.pantech.base.common.db.DBSource; import com.pantech.base.common.exception.WrongSQLException; import com.pantech.base.common.tools.MyTools; public class ImportTextBean { private HttpServletRequest request; private String USERCODE;//用户编号 private DBSource db; private String GX_FJXXBH;//附件信息编号 private String GX_FJXXWJM;//附件信息文件名 private String GX_FJXXTYPT;//附件信息文件类型 private String GX_FJXXWJLJ;//附件信息文件路径 private String GX_FJXXYLLJ;//附件信息预览路径 private String MSG; //提示信息 /** * 构造函数 * @param request */ public ImportTextBean(HttpServletRequest request) { this.request = request; this.db = new DBSource(request); } //读取学生信息 public Vector loadElective(int pageNum,int pageSize) throws SQLException { DBSource dbSource = new DBSource(request); Vector vector = null; String sql = ""; sql="SELECT * FROM [student].[dbo].[V_基础信息_学生信息表] "; vector = dbSource.getConttexJONSArr(sql, pageNum, pageSize); return vector; } //查询附件信息表 public Vector queryList(String XSBH) throws SQLException { String sql=""; Vector vec = null; // 结果集 sql="SELECT [编号],[学生编号],[文件名],[文件类型],[文件路径],[预览路径],[创建人],convert(nvarchar(19),创建时间,21) as 创建时间,[状态] " + "FROM [V_学生管理_附件信息表] where 学生编号 ='" + MyTools.fixSql(XSBH)+"'"; vec = db.getConttexJONSArr(sql, 0, 0); return vec; } //Uploadify上传文件 public void uploadifyFile(String savePath, HttpServletRequest request, HttpServletResponse response){ File f1 = new File(savePath); //当文件夹不存在时创建 if (!f1.exists()) { f1.mkdirs(); } DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); upload.setHeaderEncoding("utf-8"); List fileList = null; try { fileList = upload.parseRequest(request); Iterator<FileItem> it = fileList.iterator(); String name = ""; //文件名 String extName = ""; //文件后缀名 int dian=0;//点所在的位置 while (it.hasNext()) { FileItem item = it.next(); if (!item.isFormField()) { name = item.getName(); String fileName = name; long size = item.getSize(); String type = item.getContentType(); System.out.println(size + " " + type); if (name == null || name.trim().equals("")) { continue; } //扩展名格式 if (name.lastIndexOf(".") >= 0) { extName = name.substring(name.lastIndexOf(".")); //获取文件格式 } File file = null; String filePath = ""; //文件路径 String tempFilePath = ""; //文件临时路径 //SimpleDateFormat form = new SimpleDateFormat("HH-mm-ss-SS"); long ct =System.currentTimeMillis(); //获得当前系统时间毫秒,毫秒数其实就是自1970年1月1日0时起的毫秒数 Date newdate=new Date();//给图片加时间为防止页面图片不刷新 //String temp1=form.format(newdate); do { //生成文件名 //name = temp1.replaceAll("-", "").toUpperCase(); name=String.valueOf(ct)+"-"+this.getUSERCODE(); //获得毫秒数生成文件名加上当前登入人 filePath = savePath +""+ name+extName ; tempFilePath = name+""+extName; dian=tempFilePath.indexOf("."); file = new File(filePath); } while (file.exists()); File saveFile = new File(filePath); item.write(saveFile); //判断如果文件是txt文件的话,根据不同编码修改编码为UTF-8,以免预览出现乱码 if(".txt".equalsIgnoreCase(extName)){ String code = judgeCharset(new File(filePath));//判断文件编码 //System.out.println("++++++++++++++++++++++++++++++上传文件字符集为:"+code); if(!"UTF-8".equalsIgnoreCase(code)){ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)),"UTF-8")); bw.write(new String(item.getString(code).getBytes("UTF8"),"UTF-8")); bw.flush(); bw.close(); } } this.setGX_FJXXTYPT(extName); //附件信息文件类型,执行获得附件类型字段方法 this.setGX_FJXXWJM(fileName); //文件名 this.setGX_FJXXWJLJ(filePath); //文件完整路径 this.setGX_FJXXYLLJ(tempFilePath.substring(0, dian)+".swf"); //文件临时路径 System.out.println(extName+":"+fileName+"&&"+filePath); } this.setMSG("保存成功"); } } catch(Exception e){ this.setMSG("保存失败"); e.printStackTrace(); } } //往数据库插入 public void UploadToDB(HttpServletRequest req, String XSBH) throws SQLException, WrongSQLException{ DBSource db = new DBSource(req); //声明数据库连接对象 SimpleDateFormat form = new SimpleDateFormat("HH-mm-ss-SS"); Date newdate=new Date();//给图片加时间为防止页面图片不刷新 String sql=""; String temp1=form.format(newdate); System.err.println("SQL:"+temp1); sql = "insert into [V_学生管理_附件信息表] ([编号],[学生编号],[文件名],[文件类型],[文件路径],[预览路径],[创建人],[创建时间],[状态]) values ("+ "newid(),"+ //编号 "'"+MyTools.fixSql(XSBH)+"',"+ //学生编号 "'"+MyTools.fixSql(this.getGX_FJXXWJM())+"',"+ //文件名 "'"+MyTools.fixSql(this.getGX_FJXXTYPT())+"',"+ //文件类型 "'"+MyTools.fixSql(this.getGX_FJXXWJLJ())+"',"+ //文件路径 "'"+MyTools.fixSql(this.getGX_FJXXYLLJ())+"',"+ //预览路径 "'post',"+ //USERCODE "getDate(),'1'"+ //创建时间 ")"; if(db.executeInsertOrUpdate(sql)){ this.setMSG("上传文件成功"); }else{ this.setMSG("上传文件失败"); } } //判断文件编码 public String judgeCharset(File file) { String charset = "GBK"; byte [] first3Bytes = new byte[3]; try { boolean checked = false; BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); bis.mark(0); int read = bis.read(first3Bytes, 0, 3); if (read == -1) return charset; if (first3Bytes[0] == (byte)0xFF && first3Bytes[1] == (byte)0xFE) { charset = "UTF-16LE"; checked = true; }else if(first3Bytes[0] == (byte)0xFE && first3Bytes[1] == (byte)0xFF) { charset = "UTF-16BE"; checked = true; }else if(first3Bytes[0] == (byte)0xEF && first3Bytes[1] == (byte)0xBB && first3Bytes[2] == (byte)0xBF) { charset = "UTF-8"; checked = true; } bis.reset(); if (!checked) { while ((read = bis.read()) != -1) { if (read >= 0xF0) break; if (0x80<=read && read <= 0xBF) //单独出现BF以下的,也算是GBK break; if (0xC0<=read && read <= 0xDF) { read = bis.read(); if (0x80<= read && read <= 0xBF)//双字节 (0xC0 - 0xDF) (0x80 - 0xBF),也可能在GB编码内 continue; else break; } else if (0xE0 <= read && read <= 0xEF) {//也有可能出错,但是几率较小 read = bis.read(); if (0x80<= read && read <= 0xBF) { read = bis.read(); if (0x80<= read && read <= 0xBF) { charset = "UTF-8"; break; } else break; } else break; } } } bis.close(); } catch (Exception e) { e.printStackTrace(); } return charset; } //删除附件信息表 public void deleteRow(String FJXXBH)throws SQLException, WrongSQLException{ String sql = ""; Vector vec = null; //查询文件路径 String fileName = ""; sql = "select [文件路径] from [V_学生管理_附件信息表] where 编号='" + MyTools.fixSql(FJXXBH) + "'"; vec = db.GetContextVector(sql); if(vec.size()>0 && vec!=null) fileName = MyTools.fixSql(MyTools.StrFiltr(vec.get(0))); sql = "delete from [V_学生管理_附件信息表] where 编号='" + MyTools.fixSql(FJXXBH) + "' "; if(db.executeInsertOrUpdate(sql)){ if(fileName.length()>0){ //截取文件名 fileName = fileName.substring(fileName.lastIndexOf("/")+1, fileName.lastIndexOf(".")); //删除相关文件 deleteFile(fileName); } this.setMSG("删除成功");//成功设置消息为<删除成功> }else{ this.setMSG("删除失败");//失败设置消息为<删除成功> } } //删除相关文件 public boolean deleteFile(String fileName){ boolean result = true; //获取配置路径 String url = MyTools.getProp(request, "Base.JYWDStandardUpLoadPath"); //删除该教学标准信息的上传文件及pwf文件 File folder = new File(url); File temp = null; File[] filelist = folder.listFiles();//列出文件里所有的文件 int loc = 0; for(int i=0; i<filelist.length; i++){//对这些文件进行循环遍历 temp = filelist[i]; loc = temp.getName().indexOf(fileName);//获取文件名字符的位置 if(loc!=-1){//去掉后缀,如果文件名为该文件名的话就删除 temp.delete();//删除文件 } } return result; } public String getGX_FJXXBH() { return GX_FJXXBH; } public void setGX_FJXXBH(String gX_FJXXBH) { GX_FJXXBH = gX_FJXXBH; } public String getGX_FJXXWJM() { return GX_FJXXWJM; } public void setGX_FJXXWJM(String gX_FJXXWJM) { GX_FJXXWJM = gX_FJXXWJM; } public String getGX_FJXXTYPT() { return GX_FJXXTYPT; } public void setGX_FJXXTYPT(String gX_FJXXTYPT) { GX_FJXXTYPT = gX_FJXXTYPT; } public String getGX_FJXXWJLJ() { return GX_FJXXWJLJ; } public void setGX_FJXXWJLJ(String gX_FJXXWJLJ) { GX_FJXXWJLJ = gX_FJXXWJLJ; } public String getGX_FJXXYLLJ() { return GX_FJXXYLLJ; } public void setGX_FJXXYLLJ(String gX_FJXXYLLJ) { GX_FJXXYLLJ = gX_FJXXYLLJ; } public String getUSERCODE() { return USERCODE; } public void setUSERCODE(String uSERCODE) { USERCODE = uSERCODE; } public String getMSG() { return MSG; } public void setMSG(String mSG) { MSG = mSG; } }
转换PDF代码:(注:此方法在Servlet层调用进行处理)
package or.og.jxldemo; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; import com.pantech.base.common.tools.MyTools; /** * doc docx格式转换 * * @author Administrator * */ public class Office2SWF { private static final int environment = 1;// 环境 1:windows 2:linux // (只涉及pdf2swf路径问题) private String fileString; private String outputPath = "";//输入路径 ,如果不设置就输出在默认的位置 private String fileName; private File pdfFile; private File swfFile; private File docFile; private String MSG; private HttpServletRequest request; public Office2SWF(HttpServletRequest request, String fileString) { this.request = request; init(fileString); } /** * 重新设置file * * @param fileString */ public void setFile(String fileString) { init(fileString); } /** * 初始化 * * @param fileString */ private void init(String fileString) { this.fileString = fileString; fileName = fileString.substring(0, fileString.lastIndexOf(".")); docFile = new File(fileString); pdfFile = new File(fileName + ".pdf"); swfFile = new File(fileName + ".swf"); } /** * 转为PDF * * @param file */ private void doc2pdf() throws Exception { if (docFile.exists()) { if (!pdfFile.exists()) { try { OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100); connection.connect(); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(docFile, pdfFile); // close the connection connection.disconnect(); System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****"); } catch (java.net.ConnectException e) { e.printStackTrace(); System.out.println("****swf转换器异常,openoffice服务未启动!****"); Runtime rt = Runtime.getRuntime(); String batPath = MyTools.getProp(request, "Base.openofficeBatPath"); java.io.File file = new java.io.File(batPath); // 检查BAT文件是否存在 if (file.isFile() && file.exists()) { rt.exec(batPath); this.setMSG("openoffice服务未启动"); }else{ this.setMSG("openofficeBat文件不存在"); } throw e; } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { e.printStackTrace(); System.out.println("****swf转换器异常,读取转换文件失败****"); throw e; } catch (Exception e) { e.printStackTrace(); throw e; } } else { System.out.println("****已经转换为pdf,不需要再进行转化****"); } } else { System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****"); } } /** * 转换成 swf */ private void pdf2swf(boolean flag) throws Exception { Runtime r = Runtime.getRuntime(); if (!swfFile.exists()) { if (pdfFile.exists()) { if (environment == 1) {// windows环境处理 try { String swfToolsPath = MyTools.getProp(request, "Base.swfToolsPath"); Process p = r.exec(swfToolsPath + " "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9 -s languagedir=C:/xpdf/xpdf-chinese-simplified"); System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.out.print(loadStream(p.getInputStream())); System.out.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****"); if (pdfFile.exists() && flag) { //pdf文件存在并且源文件不是PDF格式 pdfFile.delete(); } } catch (IOException e) { e.printStackTrace(); throw e; } } else if (environment == 2) {// linux环境处理 try { Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9 -s languagedir=C:/xpdf/xpdf-chinese-simplified"); System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****"); if (pdfFile.exists()) { pdfFile.delete(); } } catch (Exception e) { e.printStackTrace(); throw e; } } } else { System.out.println("****pdf不存在,无法转换****"); } } else { System.out.println("****swf已经存在不需要转换****"); } } static String loadStream(InputStream in) throws IOException { int ptr = 0; in = new BufferedInputStream(in); StringBuffer buffer = new StringBuffer(); while ((ptr = in.read()) != -1) { buffer.append((char) ptr); } return buffer.toString(); } /** * 转换主方法 */ public boolean conver() { boolean flag = false; if (swfFile.exists()) { System.out.println("****swf转换器开始工作,该文件已经转换为swf****"); return true; } if (environment == 1) { System.out.println("****swf转换器开始工作,当前设置运行环境windows****"); } else { System.out.println("****swf转换器开始工作,当前设置运行环境linux****"); } try { if (!pdfFile.exists()) { flag = true; doc2pdf(); pdf2swf(flag); }else{ pdf2swf(flag); } } catch (Exception e) { e.printStackTrace(); return false; } if (swfFile.exists()) { return true; } else { return false; } } /** * 返回文件路径 * * @param s */ public String getswfPath() { if (swfFile.exists()) { String tempString = swfFile.getPath(); tempString = tempString.replaceAll("\\\\", "/"); return tempString; } else { return ""; } } /** * 设置输出路径 */ public void setOutputPath(String outputPath) { this.outputPath = outputPath; if (!outputPath.equals("")) { String realName = fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf(".")); if (outputPath.charAt(outputPath.length()) == '/') { swfFile = new File(outputPath + realName + ".swf"); } else { swfFile = new File(outputPath + realName + ".swf"); } } } /** * Get&&Set方法 */ public String getFileString() { return fileString; } public void setFileString(String fileString) { this.fileString = fileString; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public File getPdfFile() { return pdfFile; } public void setPdfFile(File pdfFile) { this.pdfFile = pdfFile; } public File getSwfFile() { return swfFile; } public void setSwfFile(File swfFile) { this.swfFile = swfFile; } public File getDocFile() { return docFile; } public void setDocFile(File docFile) { this.docFile = docFile; } public String getOutputPath() { return outputPath; } public String getMSG() { return MSG; } public void setMSG(String msg) { MSG = msg; } }