1149 lines
44 KiB
Java
1149 lines
44 KiB
Java
package weaver.file;
|
||
|
||
import DBstep.iMsgServer2000;
|
||
import com.api.odoc.util.OdocFileUtil;
|
||
import weaver.alioss.AliOSSObjectManager;
|
||
import weaver.conn.ConnStatement;
|
||
import weaver.conn.RecordSet;
|
||
import weaver.docs.docs.DocManager;
|
||
import weaver.docs.docs.ImageFileIdUpdate;
|
||
import weaver.file.util.FileDeleteUtil;
|
||
import weaver.general.BaseBean;
|
||
import weaver.general.Util;
|
||
import weaver.sm.SM4Utils;
|
||
import weaver.system.SystemComInfo;
|
||
|
||
import java.io.*;
|
||
import java.util.Date;
|
||
import java.util.UUID;
|
||
import java.util.zip.ZipEntry;
|
||
import java.util.zip.ZipInputStream;
|
||
import java.util.zip.ZipOutputStream;
|
||
|
||
|
||
/**
|
||
* Title: 附件处理基本类
|
||
* Company: weaver
|
||
*
|
||
* @author fanggsh
|
||
* @version 1.0
|
||
*/
|
||
|
||
public class ImageFileManager extends BaseBean {
|
||
|
||
private static ImageFileIdUpdate imageFileIdUpdate = new ImageFileIdUpdate();
|
||
|
||
private int imageFileId; //附件id
|
||
|
||
private String imageFileName;//文件名称
|
||
|
||
private String imageFileType; //文件MIME类型
|
||
|
||
private int imageFileUsed; //文件使用次数
|
||
|
||
private String fileRealPath; //文件存放目录
|
||
|
||
private String isZip; //是否压缩 0:否 1:是
|
||
|
||
private String isencrypt; //是否加密 0:否 1:是 该字段已经基本不使用
|
||
|
||
private String filesize; //文件大小 单位为字节
|
||
|
||
private int downloads; //下载次数
|
||
|
||
private String miniimgpath; //缩略图存放路径
|
||
|
||
private String imgsize; //缩略图大小
|
||
|
||
private String isFTP; //是否存储到FTP 1:是 0或其它:否
|
||
|
||
private int FTPConfigId;//FTP服务器配置ID
|
||
|
||
private int isaesencrypt;//是否使用AES附件加密 1:是 0或其它:否
|
||
|
||
private String aescode; //AES加密密码
|
||
|
||
private String tokenKey; //令牌标记
|
||
|
||
private String storageStatus; //传输标志 1:成功 2:文件异常 3:传输中 4:不需要传到云 其他:未传输
|
||
|
||
private String comefrom; // 附件来源 WorkflowToDoc:流程存为文档
|
||
|
||
private int secretlevel; //密级
|
||
private String secretvalidity; // 保密期限
|
||
|
||
private byte[] data;
|
||
|
||
/**
|
||
* 构造函数
|
||
*/
|
||
public ImageFileManager() {
|
||
try {
|
||
resetParameter();
|
||
} catch (Exception ex) {
|
||
writeLog(ex);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 重置各参数的值
|
||
*/
|
||
public void resetParameter() {
|
||
|
||
imageFileId=0;
|
||
imageFileName="";
|
||
imageFileType="";
|
||
imageFileUsed=1;
|
||
fileRealPath="";
|
||
isZip="";
|
||
isencrypt="";
|
||
filesize="";
|
||
downloads=0;
|
||
miniimgpath="";
|
||
imgsize="";
|
||
isFTP="";
|
||
FTPConfigId=0;
|
||
isaesencrypt=0;
|
||
aescode="";
|
||
tokenKey="";
|
||
storageStatus="";
|
||
comefrom="";
|
||
secretlevel=DocManager.DEFAILT_SECRET_LEVEL;
|
||
secretvalidity="";
|
||
data=null;
|
||
}
|
||
|
||
/**
|
||
* 返回 附件ID
|
||
*
|
||
* @return 附件ID
|
||
* @throws Exception
|
||
*/
|
||
public int getImageFileId() {
|
||
return imageFileId;
|
||
}
|
||
|
||
/**
|
||
* 返回文件名称
|
||
*
|
||
* @return 文件名称
|
||
* @throws Exception
|
||
*/
|
||
public String getImageFileName() {
|
||
return imageFileName;
|
||
}
|
||
|
||
/**
|
||
* 返回文件MIME类型
|
||
*
|
||
* @return 文件MIME类型
|
||
* @throws Exception
|
||
*/
|
||
public String getImageFileType() {
|
||
return imageFileType;
|
||
}
|
||
|
||
public void setImageFileType(String para) {
|
||
this.imageFileType = para;
|
||
}
|
||
|
||
/**
|
||
* 返回文件使用次数
|
||
*
|
||
* @return 文件使用次数
|
||
* @throws Exception
|
||
*/
|
||
public int getImageFileUsed() {
|
||
return imageFileUsed;
|
||
}
|
||
|
||
/**
|
||
* 返回文件存放目录
|
||
*
|
||
* @return 文件存放目录
|
||
* @throws Exception
|
||
*/
|
||
public String getFileRealPath() {
|
||
return fileRealPath;
|
||
}
|
||
|
||
/**
|
||
* 返回是否压缩
|
||
*
|
||
* @return 是否压缩
|
||
* @throws Exception
|
||
*/
|
||
public String getIsZip() {
|
||
return isZip;
|
||
}
|
||
|
||
/**
|
||
* 返回是否加密 该方法已基本不使用
|
||
*
|
||
* @return 是否加密
|
||
* @throws Exception
|
||
*/
|
||
public String getIsencrypt() {
|
||
return isencrypt;
|
||
}
|
||
|
||
/**
|
||
* 返回文件大小 单位为字节
|
||
*
|
||
* @return 文件大小 单位为字节
|
||
* @throws Exception
|
||
*/
|
||
public String getFilesize() {
|
||
return filesize;
|
||
}
|
||
|
||
/**
|
||
* 返回下载次数
|
||
*
|
||
* @return 下载次数
|
||
* @throws Exception
|
||
*/
|
||
public int getDownloads() {
|
||
return downloads;
|
||
}
|
||
|
||
/**
|
||
* 返回 缩略图存放路径
|
||
*
|
||
* @return 缩略图存放路径
|
||
* @throws Exception
|
||
*/
|
||
public String getMiniimgpath() {
|
||
return miniimgpath;
|
||
}
|
||
|
||
/**
|
||
* 返回缩略图大小
|
||
*
|
||
* @return 缩略图大小
|
||
* @throws Exception
|
||
*/
|
||
public String getImgsize() {
|
||
return imgsize;
|
||
}
|
||
|
||
/**
|
||
* 返回是否存储到FTP 1:是 0或其它:否
|
||
*
|
||
* @return 是否存储到FTP 1:是 0或其它:否
|
||
* @throws Exception
|
||
*/
|
||
public String getIsFTP() {
|
||
return isFTP;
|
||
}
|
||
|
||
/**
|
||
* 返回FTP服务器配置ID
|
||
*
|
||
* @return FTP服务器配置ID
|
||
* @throws Exception
|
||
*/
|
||
public int getFTPConfigId() {
|
||
return FTPConfigId;
|
||
}
|
||
|
||
/**
|
||
* 返回是否使用AES附件加密
|
||
*
|
||
* @return 是否使用AES附件加密
|
||
* @throws Exception
|
||
*/
|
||
public int getIsaesencrypt() {
|
||
return isaesencrypt;
|
||
}
|
||
|
||
/**
|
||
* 返回AES加密密码
|
||
*
|
||
* @return AES加密密码
|
||
* @throws Exception
|
||
*/
|
||
public String getAescode() {
|
||
return aescode;
|
||
}
|
||
|
||
/**
|
||
* 返回令牌标记
|
||
*
|
||
* @return 令牌标记
|
||
* @throws Exception
|
||
*/
|
||
public String getTokenKey() {
|
||
return tokenKey;
|
||
}
|
||
|
||
/**
|
||
* 返回传输标志
|
||
*
|
||
* @return 传输标志
|
||
* @throws Exception
|
||
*/
|
||
public String getStorageStatus() {
|
||
return storageStatus;
|
||
}
|
||
|
||
public void setImageFileId(int imageFileId) {
|
||
this.imageFileId = imageFileId;
|
||
}
|
||
|
||
public int getSecretlevel() {
|
||
return secretlevel;
|
||
}
|
||
|
||
public void setSecretlevel(int secretlevel) {
|
||
this.secretlevel = secretlevel;
|
||
}
|
||
|
||
public String getSecretvalidity() {
|
||
return secretvalidity;
|
||
}
|
||
|
||
public void setSecretvalidity(String secretvalidity) {
|
||
this.secretvalidity = secretvalidity;
|
||
}
|
||
|
||
/**
|
||
* 返回附件来源
|
||
*
|
||
* @return 附件来源
|
||
* @throws Exception
|
||
*/
|
||
public String getComefrom() {
|
||
return comefrom;
|
||
}
|
||
|
||
public Date getLastModified()
|
||
{
|
||
Date lastModified = null;
|
||
boolean isonlyAliOSS=false;
|
||
if(!tokenKey.equals("")&&storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
|
||
isonlyAliOSS=true;
|
||
}
|
||
if(isonlyAliOSS){
|
||
lastModified = weaver.alioss.AliOSSObjectUtil.getLastModified(tokenKey);
|
||
}else{
|
||
if(fileRealPath!=null&&!fileRealPath.equals("")){
|
||
File file = new File(fileRealPath);
|
||
boolean bool = file.exists();
|
||
if(bool)
|
||
{
|
||
long millisec = file.lastModified();
|
||
lastModified = new Date(millisec);
|
||
}
|
||
}
|
||
}
|
||
return lastModified;
|
||
}
|
||
|
||
public Date getLastModified(String fileRealPath)
|
||
{
|
||
Date lastModified = null;
|
||
if(fileRealPath!=null&&!fileRealPath.equals("")) {
|
||
File file = new File(fileRealPath);
|
||
boolean bool = file.exists();
|
||
if (bool) {
|
||
long millisec = file.lastModified();
|
||
lastModified = new Date(millisec);
|
||
}
|
||
}
|
||
return lastModified;
|
||
}
|
||
|
||
/**
|
||
* 设置文件名称
|
||
*
|
||
* @param docid_para
|
||
* 文件名称
|
||
*/
|
||
public void setImagFileName(String para) {
|
||
this.imageFileName = para;
|
||
}
|
||
|
||
/**
|
||
* 设置附件来源
|
||
*
|
||
* @param docid_para
|
||
* 附件来源
|
||
*/
|
||
public void setComefrom(String para) {
|
||
this.comefrom = para;
|
||
}
|
||
|
||
/**
|
||
* 设置文档ID
|
||
*
|
||
* @param docid_para
|
||
* 文档ID
|
||
*/
|
||
public void setData(byte[] para) {
|
||
this.data = para;
|
||
}
|
||
|
||
|
||
|
||
/**
|
||
* 返回文件流 已经经过脱密、解压
|
||
*
|
||
* @return 文件流
|
||
* @throws Exception
|
||
*/
|
||
public InputStream getInputStream() {
|
||
InputStream imagefile = null;
|
||
try{
|
||
boolean isonlyAliOSS=false;
|
||
if(!tokenKey.equals("")&&storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
|
||
isonlyAliOSS=true;
|
||
}
|
||
|
||
if(isonlyAliOSS){
|
||
imagefile=weaver.alioss.AliOSSObjectUtil.downloadFile(tokenKey);
|
||
}else{
|
||
if(fileRealPath!=null&&!fileRealPath.equals("")){
|
||
File thefile = new File(fileRealPath) ;
|
||
if(isZip.equals("1")) {
|
||
ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile)) ;
|
||
if(zin.getNextEntry() != null)
|
||
imagefile = new BufferedInputStream(zin) ;
|
||
} else{
|
||
imagefile = new BufferedInputStream(new FileInputStream(thefile)) ;
|
||
}
|
||
|
||
}else{
|
||
ConnStatement statement = null;
|
||
try {
|
||
statement = new ConnStatement();
|
||
boolean isoracle = ("oracle").equals(statement.getDBType()) ;
|
||
String sql = "select imagefile from ImageFile where imagefileid = " + imageFileId;
|
||
statement.setStatementSql(sql);
|
||
statement.executeQuery();
|
||
if(statement.next()){
|
||
if( isoracle ) imagefile = new BufferedInputStream(statement.getBlobBinary("imagefile")) ;
|
||
else imagefile = new BufferedInputStream(statement.getBinaryStream("imagefile")) ;
|
||
}
|
||
} catch(Exception ex) {
|
||
}finally {
|
||
try{
|
||
if(statement!=null) statement.close() ;
|
||
}catch(Exception ex){
|
||
}
|
||
}
|
||
}
|
||
if(isaesencrypt==1){
|
||
imagefile = AESCoder.decrypt(imagefile, aescode);
|
||
}
|
||
}
|
||
}catch(Exception ex){
|
||
|
||
}
|
||
return imagefile;
|
||
}
|
||
|
||
/**
|
||
* 返回文件流 已经经过脱密、解压
|
||
* @param imageFileId_para
|
||
* @return 文件流
|
||
* @throws Exception
|
||
*/
|
||
public static InputStream getInputStreamById(int imageFileId_para) {
|
||
InputStream imagefile = null;
|
||
try{
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "select imagefilename,fileRealPath,isZip,isaesencrypt,aescode,tokenKey,storageStatus from ImageFile where imageFileId = " + imageFileId_para;
|
||
rs.executeSql(sql);
|
||
if(rs.next()){
|
||
String static_fileRealPath=Util.null2String(rs.getString("fileRealPath"));
|
||
String static_isZip=Util.null2String(rs.getString("isZip"));
|
||
int static_isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
|
||
String static_aescode=Util.null2String(rs.getString("aescode"));
|
||
String static_tokenKey=Util.null2String(rs.getString("tokenKey"));
|
||
String static_storageStatus=Util.null2String(rs.getString("storageStatus"));
|
||
String imagefilename=Util.null2String(rs.getString("imagefilename"));
|
||
boolean isonlyAliOSS=false;
|
||
if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
|
||
isonlyAliOSS=true;
|
||
}
|
||
|
||
if(isonlyAliOSS){
|
||
imagefile=weaver.alioss.AliOSSObjectUtil.downloadFile(static_tokenKey);
|
||
}else{
|
||
if(static_fileRealPath!=null&&!static_fileRealPath.equals("")){
|
||
File thefile = new File(static_fileRealPath) ;
|
||
if(static_isZip.equals("1")) {
|
||
ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile)) ;
|
||
if(zin.getNextEntry() != null)
|
||
imagefile = new BufferedInputStream(zin) ;
|
||
} else{
|
||
imagefile = new BufferedInputStream(new FileInputStream(thefile)) ;
|
||
}
|
||
}else{
|
||
ConnStatement statement = null;
|
||
try {
|
||
statement = new ConnStatement();
|
||
boolean isoracle = ("oracle").equals(statement.getDBType()) ;
|
||
statement.setStatementSql("select imagefile from ImageFile where imagefileid = " + imageFileId_para);
|
||
statement.executeQuery();
|
||
if(statement.next()){
|
||
if( isoracle ) imagefile = new BufferedInputStream(statement.getBlobBinary("imagefile")) ;
|
||
else imagefile = new BufferedInputStream(statement.getBinaryStream("imagefile")) ;
|
||
}
|
||
} catch(Exception ex) {
|
||
}finally {
|
||
try{
|
||
if(statement!=null) statement.close() ;
|
||
}catch(Exception ex){
|
||
}
|
||
}
|
||
}
|
||
if(static_isaesencrypt==1){
|
||
imagefile = AESCoder.decrypt(imagefile, static_aescode);
|
||
}
|
||
|
||
}
|
||
if(null!=imagefile){
|
||
String extName = OdocFileUtil.getFileExt(imagefilename);
|
||
int byteread;
|
||
byte data[] = new byte[1024];
|
||
if(isOfficeToDocument(extName)&&isMsgObjToDocument()){
|
||
//正文的处理
|
||
ByteArrayOutputStream bout = null;
|
||
try {
|
||
bout = new ByteArrayOutputStream() ;
|
||
while((byteread = imagefile.read(data)) != -1) {
|
||
bout.write(data, 0, byteread) ;
|
||
bout.flush() ;
|
||
}
|
||
byte[] fileBody = bout.toByteArray();
|
||
iMsgServer2000 MsgObj = new iMsgServer2000();
|
||
MsgObj.MsgFileBody(fileBody); //将文件信息打包
|
||
fileBody = MsgObj.ToDocument(MsgObj.MsgFileBody()); //通过iMsgServer200 将pgf文件流转化为普通Office文件流
|
||
imagefile = new ByteArrayInputStream(fileBody);
|
||
bout.close();
|
||
}
|
||
catch(Exception e) {
|
||
if(bout!=null) bout.close();
|
||
new BaseBean().writeLog("ImageFileManager.getInputStreamById(int imageFileId_para),exception1:",e);
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}catch(Exception ex){
|
||
new BaseBean().writeLog("ImageFileManager.getInputStreamById(int imageFileId_para),exception:",ex);
|
||
}
|
||
return imagefile;
|
||
}
|
||
|
||
private static boolean isOfficeToDocument(String extName){
|
||
boolean isOfficeForToDocument=false;
|
||
if("xls".equalsIgnoreCase(extName) || "doc".equalsIgnoreCase(extName)||"wps".equalsIgnoreCase(extName)||"ppt".equalsIgnoreCase(extName)||"docx".equalsIgnoreCase(extName)||"xlsx".equalsIgnoreCase(extName)||"pptx".equalsIgnoreCase(extName)){
|
||
isOfficeForToDocument=true;
|
||
}
|
||
return isOfficeForToDocument;
|
||
}
|
||
|
||
private static boolean isMsgObjToDocument(){
|
||
boolean isMsgObjToDocument=true;
|
||
|
||
BaseBean basebean = new BaseBean();
|
||
String mClientName=Util.null2String(basebean.getPropValue("weaver_obj","iWebOfficeClientName"));
|
||
boolean isIWebOffice2003 = (mClientName.indexOf("iWebOffice2003")>-1)?true:false;
|
||
String isHandWriteForIWebOffice2009=Util.null2String(basebean.getPropValue("weaver_obj","isHandWriteForIWebOffice2009"));
|
||
if(isIWebOffice2003||isHandWriteForIWebOffice2009.equals("0")){
|
||
isMsgObjToDocument=false;
|
||
}
|
||
if(mClientName.indexOf("iWebOffice2009")>-1)
|
||
{
|
||
isMsgObjToDocument=true;
|
||
}
|
||
|
||
return isMsgObjToDocument;
|
||
}
|
||
|
||
/**
|
||
* 通过附件ID得到相应的附件信息
|
||
*
|
||
* @throws Exception
|
||
*/
|
||
public void getImageFileInfoById(int imageFileId_para) {
|
||
|
||
try{
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "select t1.imageFileId,t1.imageFileName,t1.imageFileType,t1.imageFileUsed,t1.fileRealPath,t1.isZip,t1.isencrypt,t1.filesize,t1.downloads,t1.miniimgpath,t1.imgsize,t1.isFTP,t1.FTPConfigId,t1.isaesencrypt,t1.aescode,t1.tokenKey,t1.storageStatus,t1.comefrom,t2.imagefilename as realname from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + imageFileId_para;
|
||
rs.executeSql(sql);
|
||
if(rs.next()){
|
||
imageFileId=Util.getIntValue(rs.getString("imageFileId"),0);
|
||
imageFileName=Util.null2String(rs.getString("realname"));
|
||
if(imageFileName.equals("")){
|
||
imageFileName = Util.null2String(rs.getString("imageFileName"));
|
||
}
|
||
imageFileType=Util.null2String(rs.getString("imageFileType"));
|
||
imageFileUsed=Util.getIntValue(rs.getString("imageFileUsed"),0);
|
||
fileRealPath=Util.null2String(rs.getString("fileRealPath"));
|
||
isZip=Util.null2String(rs.getString("isZip"));
|
||
isencrypt=Util.null2String(rs.getString("isencrypt"));
|
||
filesize=Util.null2String(rs.getString("filesize"));
|
||
downloads=Util.getIntValue(rs.getString("downloads"),0);
|
||
miniimgpath=Util.null2String(rs.getString("miniimgpath"));
|
||
imgsize=Util.null2String(rs.getString("imgsize"));
|
||
isFTP=Util.null2String(rs.getString("isFTP"));
|
||
FTPConfigId=Util.getIntValue(rs.getString("FTPConfigId"),0);
|
||
isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
|
||
aescode=Util.null2String(rs.getString("aescode"));
|
||
tokenKey=Util.null2String(rs.getString("tokenKey"));
|
||
storageStatus=Util.null2String(rs.getString("storageStatus"));
|
||
comefrom=Util.null2String(rs.getString("comefrom"));
|
||
secretlevel = Util.getIntValue(rs.getString("secretlevel"));
|
||
secretvalidity = Util.null2s(rs.getString(secretvalidity),"");
|
||
}
|
||
}catch(Exception ex){
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 复制物理文件
|
||
* @param imageFileId_para
|
||
* @return 新的附件id
|
||
*/
|
||
public static int copyImageFile(int imageFileId_para) {
|
||
int new_imageFileId=0;
|
||
if(imageFileId_para<=0){
|
||
return new_imageFileId;
|
||
}
|
||
try{
|
||
String static_imageFileName="";
|
||
String static_imageFileType="";
|
||
int static_imageFileUsed=0;
|
||
String static_fileRealPath="";
|
||
String static_isZip="";
|
||
String static_isencrypt="";
|
||
String static_filesize="";
|
||
int static_downloads=0;
|
||
String static_miniimgpath="";
|
||
String static_imgsize="";
|
||
String static_isFTP="";
|
||
int static_FTPConfigId=0;
|
||
int static_isaesencrypt=0;
|
||
String static_aescode="";
|
||
String static_tokenKey="";
|
||
String static_storageStatus="";
|
||
String static_comefrom="";
|
||
int static_mainimagefile=0;
|
||
int static_secretlevel=DocManager.DEFAILT_SECRET_LEVEL;
|
||
String static_secretvalidity="";
|
||
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "select t1.imageFileId,t1.imageFileName,t1.imageFileType,t1.imageFileUsed,t1.fileRealPath,t1.isZip,t1.isencrypt,t1.filesize,t1.downloads,t1.miniimgpath,t1.imgsize,t1.isFTP,t1.FTPConfigId,t1.isaesencrypt,t1.aescode,t1.tokenKey,t1.storageStatus,t1.comefrom,t1.mainimagefile," +
|
||
"t1.secretlevel,t1.secretvalidity,t2.imagefilename as realname from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + imageFileId_para;
|
||
rs.executeSql(sql);
|
||
if(rs.next()){
|
||
static_imageFileName=Util.null2String(rs.getString("realname"));
|
||
if(static_imageFileName.equals("")){
|
||
static_imageFileName = Util.null2String(rs.getString("imageFileName"));
|
||
}
|
||
static_imageFileType=Util.null2String(rs.getString("imageFileType"));
|
||
static_imageFileUsed=Util.getIntValue(rs.getString("imageFileUsed"),0);
|
||
static_fileRealPath=Util.null2String(rs.getString("fileRealPath"));
|
||
static_isZip=Util.null2String(rs.getString("isZip"));
|
||
static_isencrypt=Util.null2String(rs.getString("isencrypt"));
|
||
static_filesize=Util.null2String(rs.getString("filesize"));
|
||
static_downloads=Util.getIntValue(rs.getString("downloads"),0);
|
||
static_miniimgpath=Util.null2String(rs.getString("miniimgpath"));
|
||
static_imgsize=Util.null2String(rs.getString("imgsize"));
|
||
static_isFTP=Util.null2String(rs.getString("isFTP"));
|
||
static_FTPConfigId=Util.getIntValue(rs.getString("FTPConfigId"),0);
|
||
static_isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
|
||
static_aescode=Util.null2String(rs.getString("aescode"));
|
||
static_tokenKey=Util.null2String(rs.getString("tokenKey"));
|
||
static_storageStatus=Util.null2String(rs.getString("storageStatus"));
|
||
static_comefrom=Util.null2String(rs.getString("comefrom"));
|
||
static_mainimagefile=Util.getIntValue(rs.getString("mainimagefile"),0);
|
||
static_secretlevel=Util.getIntValue(rs.getString("secretlevel"),0);
|
||
static_secretvalidity=Util.null2String(rs.getString("secretvalidity"));
|
||
}
|
||
if(static_imageFileName==null||static_imageFileName.trim().equals("")){
|
||
return new_imageFileId;
|
||
}
|
||
|
||
SystemComInfo syscominfo = new SystemComInfo();
|
||
String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()) ;
|
||
String fileName = UUID.randomUUID().toString();// System.currentTimeMillis() + "";解决高并发的情况下,文件重复 李迎新
|
||
if(static_fileRealPath.lastIndexOf(".")>-1){
|
||
fileName+=static_fileRealPath.substring(static_fileRealPath.lastIndexOf("."));
|
||
}
|
||
String new_fileRealPath = createdir + fileName ;
|
||
String new_tokenKey=AliOSSObjectManager.getTokenKeyByFileRealPath(new_fileRealPath);
|
||
String new_storageStatus="";
|
||
new_imageFileId=imageFileIdUpdate.getImageFileNewId();
|
||
|
||
boolean isonlyAliOSS=false;
|
||
if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
|
||
isonlyAliOSS=true;
|
||
}
|
||
|
||
if(isonlyAliOSS){
|
||
boolean copyStatus=weaver.alioss.AliOSSObjectUtil.copyObject(static_tokenKey, new_tokenKey);
|
||
if(copyStatus){
|
||
new_storageStatus="1";
|
||
}
|
||
}else if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isEnable()){
|
||
boolean copyStatus=weaver.alioss.AliOSSObjectUtil.copyObject(static_tokenKey, new_tokenKey);
|
||
if(copyStatus){
|
||
new_storageStatus="1";
|
||
}
|
||
FileManage.createDir(createdir);
|
||
FileManage.copy(static_fileRealPath, new_fileRealPath);
|
||
}else{
|
||
FileManage.createDir(createdir);
|
||
FileManage.copy(static_fileRealPath, new_fileRealPath);
|
||
}
|
||
ConnStatement statement = null;
|
||
try{
|
||
statement = new ConnStatement();
|
||
sql = "insert into ImageFile(" +
|
||
"imageFileId,imageFileName,imageFileType,imageFileUsed,fileRealPath" +
|
||
",isZip,isencrypt,filesize,downloads,miniimgpath" +
|
||
",imgsize,isFTP,FTPConfigId,isaesencrypt,aescode" +
|
||
" ,tokenKey,storageStatus,comefrom,mainimagefile" +
|
||
",secretlevel,secretvalidity"+
|
||
") values(" +
|
||
"?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?,?" +
|
||
",?,?"+
|
||
")";
|
||
statement.setStatementSql(sql);
|
||
statement.setInt(1, new_imageFileId);
|
||
statement.setString(2, static_imageFileName);
|
||
statement.setString(3, static_imageFileType);
|
||
statement.setInt(4,static_imageFileUsed);
|
||
statement.setString(5, new_fileRealPath);
|
||
statement.setString(6, static_isZip);
|
||
statement.setString(7, static_isencrypt);
|
||
statement.setString(8, static_filesize);
|
||
statement.setInt(9, static_downloads);
|
||
statement.setString(10, static_miniimgpath);
|
||
statement.setString(11, static_imgsize);
|
||
statement.setString(12, static_isFTP);
|
||
statement.setInt(13,static_FTPConfigId);
|
||
statement.setInt(14, static_isaesencrypt);
|
||
statement.setString(15, static_aescode);
|
||
statement.setString(16, new_tokenKey);
|
||
statement.setString(17, new_storageStatus);
|
||
statement.setString(18, static_comefrom);
|
||
statement.setInt(19, static_mainimagefile);
|
||
statement.setInt(20, static_secretlevel);
|
||
statement.setString(21, static_secretvalidity);
|
||
|
||
statement.executeUpdate();
|
||
|
||
}catch(Exception ex){
|
||
new BaseBean().writeLog("imagefilemanager error",ex);
|
||
new BaseBean().writeLog("imagefilemanager error haha:"+ex.getMessage());
|
||
} finally {
|
||
try {
|
||
statement.close();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
|
||
|
||
}catch(Exception ee){
|
||
new BaseBean().writeLog("imagefilemanager error",ee);
|
||
new BaseBean().writeLog("imagefilemanager error haha:"+ee.getMessage());
|
||
}
|
||
return new_imageFileId;
|
||
}
|
||
|
||
|
||
/**
|
||
* 新建物理文件
|
||
* @return 新的附件id
|
||
*/
|
||
public int saveImageFile(){
|
||
int new_imageFileId=0;
|
||
if(this.data==null){
|
||
return new_imageFileId;
|
||
}
|
||
try{
|
||
String static_imageFileName=this.imageFileName;
|
||
String static_imageFileType="";
|
||
if(this.imageFileType==null||this.imageFileType.trim().equals("")){
|
||
static_imageFileType="application/octet-stream";
|
||
}
|
||
int static_imageFileUsed=1;
|
||
String static_fileRealPath="";
|
||
String static_isZip="";
|
||
String static_isencrypt="";
|
||
String static_filesize="";
|
||
if(this.data!=null){
|
||
static_filesize=""+this.data.length;
|
||
}
|
||
int static_downloads=0;
|
||
String static_miniimgpath="";
|
||
String static_imgsize="";
|
||
String static_isFTP="";
|
||
int static_FTPConfigId=0;
|
||
int static_isaesencrypt=0;
|
||
String static_aescode="";
|
||
String static_tokenKey="";
|
||
String static_storageStatus="";
|
||
int static_secretlevel=DocManager.DEFAILT_SECRET_LEVEL;
|
||
String static_secretvalidity="";
|
||
String static_comefrom=this.comefrom;
|
||
|
||
|
||
SystemComInfo syscominfo = new SystemComInfo() ;
|
||
String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()) ;
|
||
String random= UUID.randomUUID().toString(); // 解决高并发下,文件重复问题 李迎新
|
||
String fileName = random ;
|
||
static_isZip = syscominfo.getNeedzip();
|
||
static_isaesencrypt = Util.getIntValue(syscominfo.getIsaesencrypt(),0);
|
||
static_aescode = Util.getRandomString(13);
|
||
|
||
if("1".equals(static_isZip)){
|
||
fileName += ".zip";
|
||
}
|
||
String fullName = createdir + fileName ;
|
||
static_fileRealPath = fullName;
|
||
int fsize = 0;
|
||
FileManage.createDir(createdir);
|
||
//写压缩文件
|
||
OutputStream fileOut = null ;
|
||
try{
|
||
File file = new File(static_fileRealPath) ;
|
||
if(static_isZip.equals("1")) {
|
||
ZipOutputStream filezipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file))) ;
|
||
filezipOut.setMethod(ZipOutputStream.DEFLATED) ; //设置压缩方法
|
||
filezipOut.putNextEntry(new ZipEntry(random)) ;
|
||
fileOut = filezipOut ;
|
||
} else {
|
||
fileOut = new BufferedOutputStream(new FileOutputStream(file)) ;
|
||
}
|
||
|
||
if(static_isaesencrypt==1){
|
||
fileOut = AESCoder.encrypt(fileOut, static_aescode);
|
||
String sm4 = Util.null2String(getPropValue("weaver_security_type","reversible_enc_type"));
|
||
if("sm4".equalsIgnoreCase(sm4)&&static_aescode.startsWith("sm4start")&&static_aescode.endsWith("sm4end")){
|
||
SM4Utils sM4Utils=new SM4Utils();
|
||
byte[] _key=sM4Utils.getSMCode(static_aescode);
|
||
this.data = sM4Utils.encodeBytes(this.data,_key);
|
||
}
|
||
}
|
||
|
||
fileOut.write(this.data, 0, this.data.length) ;
|
||
|
||
}catch(Exception ex){
|
||
}finally{
|
||
fileOut.close() ;
|
||
}
|
||
|
||
new_imageFileId=imageFileIdUpdate.getImageFileNewId();
|
||
static_tokenKey=AliOSSObjectManager.getTokenKeyByFileRealPath(static_fileRealPath);
|
||
|
||
ConnStatement statement = null;
|
||
try{
|
||
statement = new ConnStatement();
|
||
String sql = "insert into ImageFile(" +
|
||
"imageFileId,imageFileName,imageFileType,imageFileUsed,fileRealPath" +
|
||
",isZip,isencrypt,filesize,downloads,miniimgpath" +
|
||
",imgsize,isFTP,FTPConfigId,isaesencrypt,aescode" +
|
||
" ,tokenKey,storageStatus,comefrom" +
|
||
",secretlevel,secretvalidity"+
|
||
") values(" +
|
||
"?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?" +
|
||
",?,?" +
|
||
")";
|
||
statement.setStatementSql(sql);
|
||
statement.setInt(1, new_imageFileId);
|
||
statement.setString(2, static_imageFileName);
|
||
statement.setString(3, static_imageFileType);
|
||
statement.setInt(4,static_imageFileUsed);
|
||
statement.setString(5, static_fileRealPath);
|
||
statement.setString(6, static_isZip);
|
||
statement.setString(7, static_isencrypt);
|
||
statement.setString(8, static_filesize);
|
||
statement.setInt(9, static_downloads);
|
||
statement.setString(10, static_miniimgpath);
|
||
statement.setString(11, static_imgsize);
|
||
statement.setString(12, static_isFTP);
|
||
statement.setInt(13,static_FTPConfigId);
|
||
statement.setInt(14, static_isaesencrypt);
|
||
statement.setString(15, static_aescode);
|
||
statement.setString(16, static_tokenKey);
|
||
statement.setString(17, static_storageStatus);
|
||
statement.setString(18, static_comefrom);
|
||
statement.setInt(19, static_secretlevel);
|
||
statement.setString(20, static_secretvalidity);
|
||
|
||
statement.executeUpdate();
|
||
|
||
}catch(Exception ex){
|
||
|
||
} finally {
|
||
try {
|
||
statement.close();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
|
||
AliOSSObjectManager aliOSSObjectManager=new AliOSSObjectManager();
|
||
aliOSSObjectManager.uploadFile(static_fileRealPath,static_imageFileName,static_isZip,""+static_isaesencrypt,static_aescode);
|
||
|
||
}catch(Exception ex){
|
||
|
||
}
|
||
return new_imageFileId;
|
||
}
|
||
|
||
public int saveImageFileByInputStream(InputStream is,String filename){
|
||
int new_imageFileId=0;
|
||
if(is==null){
|
||
return new_imageFileId;
|
||
}
|
||
try{
|
||
String static_imageFileName=filename;
|
||
String static_imageFileType="";
|
||
if(this.imageFileType==null||this.imageFileType.trim().equals("")){
|
||
static_imageFileType="application/octet-stream";
|
||
}
|
||
int static_imageFileUsed=1;
|
||
String static_fileRealPath="";
|
||
String static_isZip="";
|
||
String static_isencrypt="";
|
||
String static_filesize="";
|
||
|
||
int static_downloads=0;
|
||
String static_miniimgpath="";
|
||
String static_imgsize="";
|
||
String static_isFTP="";
|
||
int static_FTPConfigId=0;
|
||
int static_isaesencrypt=0;
|
||
String static_aescode="";
|
||
String static_tokenKey="";
|
||
String static_storageStatus="";
|
||
int static_secretlevel=DocManager.DEFAILT_SECRET_LEVEL;
|
||
String static_secretvalidity="";
|
||
String static_comefrom=this.comefrom;
|
||
|
||
|
||
SystemComInfo syscominfo = new SystemComInfo() ;
|
||
String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()) ;
|
||
String random= UUID.randomUUID().toString(); // 解决高并发下,文件重复问题 李迎新
|
||
String fileName = random ;
|
||
static_isZip = syscominfo.getNeedzip();
|
||
static_isaesencrypt = Util.getIntValue(syscominfo.getIsaesencrypt(),0);
|
||
static_aescode = Util.getRandomString(13);
|
||
|
||
if("1".equals(static_isZip)){
|
||
fileName += ".zip";
|
||
}
|
||
String fullName = createdir + fileName ;
|
||
static_fileRealPath = fullName;
|
||
FileManage.createDir(createdir);
|
||
//写压缩文件
|
||
OutputStream fileOut = null ;
|
||
try{
|
||
File file = new File(static_fileRealPath) ;
|
||
if(static_isZip.equals("1")) {
|
||
ZipOutputStream filezipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file))) ;
|
||
filezipOut.setMethod(ZipOutputStream.DEFLATED) ; //设置压缩方法
|
||
filezipOut.putNextEntry(new ZipEntry(random)) ;
|
||
fileOut = filezipOut ;
|
||
} else {
|
||
fileOut = new BufferedOutputStream(new FileOutputStream(file)) ;
|
||
}
|
||
|
||
boolean writeInput = true;
|
||
if(static_isaesencrypt==1){
|
||
fileOut = AESCoder.encrypt(fileOut, static_aescode);
|
||
String sm4 = Util.null2String(getPropValue("weaver_security_type","reversible_enc_type"));
|
||
if("sm4".equalsIgnoreCase(sm4)&&static_aescode.startsWith("sm4start")&&static_aescode.endsWith("sm4end")){
|
||
|
||
ByteArrayOutputStream bos = null;
|
||
try {
|
||
bos = new ByteArrayOutputStream();
|
||
byte[] b = new byte[1024];
|
||
int n;
|
||
while ((n = is.read(b)) != -1) {
|
||
bos.write(b, 0, n);
|
||
}
|
||
this.data = bos.toByteArray();
|
||
static_filesize = this.data.length + "";
|
||
}catch(Exception e){
|
||
|
||
}finally{
|
||
if(bos != null){
|
||
try{
|
||
bos.close();
|
||
}catch(Exception e){}
|
||
}
|
||
}
|
||
|
||
SM4Utils sM4Utils=new SM4Utils();
|
||
byte[] _key=sM4Utils.getSMCode(static_aescode);
|
||
this.data = sM4Utils.encodeBytes(this.data,_key);
|
||
writeInput = false;
|
||
}
|
||
}
|
||
|
||
|
||
if(writeInput){
|
||
int n =0;
|
||
byte []b = new byte[2048];
|
||
long size = 0;
|
||
while((n=is.read(b)) != -1){
|
||
fileOut.write(b, 0, n) ;
|
||
size += n;
|
||
}
|
||
static_filesize = size+"";
|
||
}else{
|
||
fileOut.write(this.data,0,this.data.length);
|
||
}
|
||
|
||
|
||
}catch(Exception ex){
|
||
}finally{
|
||
fileOut.close() ;
|
||
}
|
||
|
||
new_imageFileId=imageFileIdUpdate.getImageFileNewId();
|
||
static_tokenKey=AliOSSObjectManager.getTokenKeyByFileRealPath(static_fileRealPath);
|
||
|
||
ConnStatement statement = null;
|
||
try{
|
||
statement = new ConnStatement();
|
||
String sql = "insert into ImageFile(" +
|
||
"imageFileId,imageFileName,imageFileType,imageFileUsed,fileRealPath" +
|
||
",isZip,isencrypt,filesize,downloads,miniimgpath" +
|
||
",imgsize,isFTP,FTPConfigId,isaesencrypt,aescode" +
|
||
" ,tokenKey,storageStatus,comefrom" +
|
||
",secretlevel,secretvalidity"+
|
||
") values(" +
|
||
"?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?,?,?" +
|
||
",?,?,?" +
|
||
",?,?" +
|
||
")";
|
||
statement.setStatementSql(sql);
|
||
statement.setInt(1, new_imageFileId);
|
||
statement.setString(2, static_imageFileName);
|
||
statement.setString(3, static_imageFileType);
|
||
statement.setInt(4,static_imageFileUsed);
|
||
statement.setString(5, static_fileRealPath);
|
||
statement.setString(6, static_isZip);
|
||
statement.setString(7, static_isencrypt);
|
||
statement.setString(8, static_filesize);
|
||
statement.setInt(9, static_downloads);
|
||
statement.setString(10, static_miniimgpath);
|
||
statement.setString(11, static_imgsize);
|
||
statement.setString(12, static_isFTP);
|
||
statement.setInt(13,static_FTPConfigId);
|
||
statement.setInt(14, static_isaesencrypt);
|
||
statement.setString(15, static_aescode);
|
||
statement.setString(16, static_tokenKey);
|
||
statement.setString(17, static_storageStatus);
|
||
statement.setString(18, static_comefrom);
|
||
statement.setInt(19, static_secretlevel);
|
||
statement.setString(20, static_secretvalidity);
|
||
|
||
statement.executeUpdate();
|
||
|
||
}catch(Exception ex){
|
||
|
||
} finally {
|
||
try {
|
||
statement.close();
|
||
} catch (Exception ex) {
|
||
}
|
||
}
|
||
|
||
AliOSSObjectManager aliOSSObjectManager=new AliOSSObjectManager();
|
||
aliOSSObjectManager.uploadFile(static_fileRealPath,static_imageFileName,static_isZip,""+static_isaesencrypt,static_aescode);
|
||
|
||
}catch(Exception ex){
|
||
|
||
}finally{
|
||
if(is != null){
|
||
try{
|
||
is.close();
|
||
}catch(Exception e){}
|
||
}
|
||
}
|
||
return new_imageFileId;
|
||
|
||
}
|
||
|
||
public void updatesecretlevel(){
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "update imagefile set secretlevel=?,secretvalidity=? where imagefileid = ?";
|
||
rs.executeUpdate(sql,secretlevel,secretvalidity,imageFileId);
|
||
}
|
||
|
||
/**
|
||
* 更改物理文件后相关触发操作
|
||
* @param imageFileId_para
|
||
*/
|
||
public static void ImageFileTrigger(int imageFileId_para) {
|
||
if(imageFileId_para<=0){
|
||
return ;
|
||
}
|
||
try{
|
||
RecordSet rs = new RecordSet();
|
||
rs.executeSql("insert into ImageFileBackUp(imageFileId) values("+imageFileId_para+")");
|
||
rs.executeSql("update DocPreview set mustReconverted='1' where imageFileId="+imageFileId_para);
|
||
rs.executeSql("update DocPreviewHtml set mustReconverted='1' where imageFileId="+imageFileId_para);
|
||
deletePdfImageFile(imageFileId_para);
|
||
}catch(Exception ex){
|
||
|
||
}
|
||
}
|
||
|
||
public static void deletePdfImageFile(int imageFileId) {
|
||
if(imageFileId<=0){
|
||
return ;
|
||
}
|
||
try{
|
||
RecordSet rs = new RecordSet();
|
||
String sql = "select p.pdfimagefileid,i.filerealpath from pdf_imagefile p,imagefile i where p.pdfimagefileid = i.imagefileid and p.imagefileid = " + imageFileId;
|
||
rs.executeSql(sql);
|
||
if(rs.next())
|
||
{
|
||
String pdfimagefileid = rs.getString("pdfimagefileid");
|
||
String filerealpath = rs.getString("filerealpath");
|
||
File file = new File(filerealpath);
|
||
|
||
new FileDeleteUtil().deleteFile(file);
|
||
|
||
rs.executeSql("delete from pdf_imagefile where imagefileid="+imageFileId);
|
||
rs.executeSql("delete from imagefile where imagefileid="+pdfimagefileid);
|
||
}
|
||
|
||
rs.executeUpdate("delete from convert_imagefile where imagefileid=?",imageFileId);
|
||
|
||
}catch(Exception ex){
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取新的附件ID
|
||
*/
|
||
public static int getNewImageFileId(){
|
||
if(null == imageFileIdUpdate) {
|
||
return -1;
|
||
}else {
|
||
return imageFileIdUpdate.getImageFileNewId();
|
||
}
|
||
}
|
||
} |