ecology_maven/weaver/file/ImageFileManager.java

1149 lines
44 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}
}