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;
} }
Java操作Jxl实现数据交互。三部曲——《第三篇》的更多相关文章
- Java操作Jxl实现数据交互。三部曲——《第一篇》
Java操作Jxl实现.xsl及.xsls两种数据表格进行批量导入数据到SQL server数据库. 本文实现背景Web项目:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- java操作mongodb——更新数据
Java中可以通过updateOne,updateMany,replaceOne方法进行集合的文档更新.但是 _id 是不能更新的 updateOne只会更新一条数据,即使通过Filters.lt(& ...
- 用Java操作数据库Datetime数据
Date.Calendar.Timestamp的区别.相互转换与使用 1 Java.util.Date 包含年.月.日.时.分.秒信息. // String转换为Date String dateStr ...
- java 操作CLOB类型数据
clob类型,但对于这个类型处理起来还是比较麻烦的,varchar2长度为4000bytes,如果varchar2能满足楼主的需求,建议使用varchar2,下面提供了在Java 中读取clob类型的 ...
- java操作html格式数据
近期在做数据抓取功能,抓取到的数据为html格式,需在后台进行转换后取值,为了避免使用字符串查找方式获取而使用Jsonp完美实现. 1. 引入Jsonp: <dependency> < ...
- JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件
2010-10-14 19:17:06 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info 信息: Entferne Dat ...
- java操作mongodb——查询数据
通过find方法查询集合中的文档信息 -------------------------------------------------------- find() 查询所有文档信息,返回FindIt ...
- java操作mongodb——插入数据
在mongodb中,表(Table)被称之为集合(Collection),记录(Record)被称为文档(Document) 首先连接到数据库 MongoClient mongoClient = ne ...
随机推荐
- codeforces 1230 div2
C 给一个图,并且在边上放上多米诺骨牌,使得每个多米诺骨牌指向的顶点的数字是一致的,并且每种骨牌只能用一种.问最多能够覆盖多少条边. 先生成每一个点指向的数字,然后判断就好了. #include< ...
- 版本号/缓存刷新 laravel mix函数
很多开发者会给编译的前端资源添加时间戳或者唯一令牌后缀以强制浏览器加载最新版本而不是代码的缓存副本.Mix 可以使用 version 方法为你处理这种场景. version 方法会自动附加唯一哈希到已 ...
- git 提交添加 emoij 文字
可能看到 git 提交是文本,就认为他无法使用表情图片,实际上 git 提交是可以添加表情 本文告诉大家如何做出下面图片提交 在 git 提交的时候,可以添加表情,只需要在字符串加上表示表情的文本 如 ...
- 51nod1160 压缩算法的矩阵——一道有趣的题
https://blog.csdn.net/lunch__/article/details/82655579 看似高大上,实际也不太好想到 先尝试确定一些位: 给出了最后一列,sort得到第一列 0X ...
- 【u212】&&【t036】最大和
Time Limit: 1 second Memory Limit: 128 MB [问题描述] N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和. [ ...
- linux加载和卸载模块
模块建立之后, 下一步是加载到内核. 如我们已指出的, insmod 为你完成这个工作. 这个 程序加载模块的代码段和数据段到内核, 接着, 执行一个类似 ld 的函数, 它连接模块中 任何未解决的符 ...
- linux 后备缓存
一个设备驱动常常以反复分配许多相同大小的对象而结束. 如果内核已经维护了一套相同 大小对象的内存池, 为什么不增加一些特殊的内存池给这些高容量的对象? 实际上, 内核 确实实现了一个设施来创建这类内存 ...
- linux进程唤醒的细节
我们已展现的唤醒进程的样子比内核中真正发生的要简单. 当进程被唤醒时产生的真正动 作是被位于等待队列入口项的一个函数控制的. 缺省的唤醒函数[22]22设置进程为可运行的 状态, 并且可能地进行一个上 ...
- yum安装错误:CRITICAL:yum.cli:Config Error: Error accessing file for config file:///home/linux/+
上网搜了一下然后自己总结一份 : 出现原因:yum可能没有,或者损坏 解决: 第一步:下载 wget http://yum.baseurl.org/download/3.2/yum-3.2.28 ...
- WNMP nginx+php5+mysql测试环境安装(Windows7)(二)
3. 安装Zend Optimizer Zend Optimizer对那些在被最终执行之前由Run-Time Complier产生的代码进行优化,提高PHP应用程序的执行速度.一般情况下,执行使用Ze ...