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