package weaver.file ;
/ * *
* Title :
* Description : , 2004 - 6 - 25 : 增 加 了 是 否 记 录 下 载 次 数 到 数 据 库
* Copyright : Copyright ( c ) 2002
* Company :
* @author , Charoes Huang
* @version 1.0 , 2004 - 6 - 25
* /
import DBstep.iMsgServer2000 ;
import com.api.doc.detail.service.DocDetailService ;
import com.api.doc.detail.service.DocViewPermission ;
import com.api.doc.detail.util.DocCoopereateUtil ;
import com.api.doc.detail.util.DocDownloadCheckUtil ;
import com.api.doc.detail.util.ImageConvertUtil ;
import com.api.doc.detail.util.PdfConvertUtil ;
import com.api.doc.mobile.systemDoc.util.SystemDocUtil ;
import com.api.doc.upload.web.util.Json2MapUtil ;
import com.api.doc.wps.service.impl.WebOfficeServiceImpl ;
import com.api.workflow.service.RequestAuthenticationService ;
import com.engine.doc.util.* ;
import com.engine.ecme.biz.EcmeRightManager ;
import com.engine.edc.biz.JoinCubeBiz ;
import com.engine.odoc.util.DocUtil ;
import com.weaver.formmodel.util.StringHelper ;
import de.schlichtherle.util.zip.ZipEntry ;
import de.schlichtherle.util.zip.ZipOutputStream ;
import org.apache.commons.lang.StringEscapeUtils ;
import org.apache.commons.lang3.StringUtils ;
import weaver.WorkPlan.WorkPlanService ;
import weaver.alioss.AliOSSObjectManager ;
import weaver.blog.BlogDao ;
import weaver.common.StringUtil ;
import weaver.conn.RecordSet ;
import weaver.cowork.CoworkDAO ;
import weaver.crm.CrmShareBase ;
import weaver.docs.EncryptDecryptFileUtil ;
import weaver.docs.category.SecCategoryComInfo ;
import weaver.docs.docs.AddWater.DocAddWaterForSecond ;
import weaver.docs.docs.DocManager ;
import weaver.email.service.MailFilePreviewService ;
import weaver.file.util.FileDeleteUtil ;
import weaver.file.util.FileManager ;
import weaver.file.util.FileWaterManager ;
import weaver.file.util.FiledownloadUtil ;
import weaver.formmode.setup.ModeRightInfo ;
import weaver.general.BaseBean ;
import weaver.general.GCONST ;
import weaver.general.Util ;
import weaver.hrm.HrmUserVarify ;
import weaver.hrm.User ;
import weaver.hrm.resource.ResourceComInfo ;
import weaver.meeting.MeetingUtil ;
import weaver.mobile.plugin.ecology.service.AuthService ;
import weaver.social.service.SocialIMService ;
import weaver.splitepage.operate.SpopForDoc ;
import weaver.system.SystemComInfo ;
import weaver.systeminfo.SystemEnv ;
import weaver.voting.VotingManager ;
import weaver.voting.groupchartvote.ImageCompressUtil ;
import weaver.wps.doccenter.utils.Tools ;
import javax.servlet.ServletException ;
import javax.servlet.ServletOutputStream ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import javax.servlet.http.HttpSession ;
import java.io.* ;
import java.net.HttpURLConnection ;
import java.net.URL ;
import java.net.URLEncoder ;
import java.text.SimpleDateFormat ;
import java.util.* ;
import java.util.zip.ZipInputStream ;
public class FileDownload extends HttpServlet {
/ * *
* 是 否 需 要 记 录 下 载 次 数
* /
private boolean isCountDownloads = false ;
private String agent = "" ;
private static final int BUFFER_SIZE = 1 * 1024 * 1024 ;
private BaseBean baseBean = new BaseBean ( ) ;
private String systemWaterwriteLog = Util . null2s ( baseBean . getPropValue ( "doc_custom_for_weaver" , "systemWaterwriteLog" ) , "0" ) ;
private String writeLogForDownload = Util . null2s ( baseBean . getPropValue ( "doc_writelog_config" , "doc_download_log" ) , "1" ) ;
public void doPost ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException {
this . doGet ( req , res ) ;
}
public void doGet ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException {
User wmloginuser = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
String wmuserid = wmloginuser . getUID ( ) + "" ;
boolean wmflag = true ;
new BaseBean ( ) . writeLog ( "wmuserid---" + wmuserid ) ;
RecordSet wmrs = new RecordSet ( ) ;
wmrs . execute ( "select count(1) as sl from uf_syqxryb where userid = '" + wmuserid + "'" ) ;
while ( wmrs . next ( ) ) {
if ( Util . getIntValue ( wmrs . getString ( "sl" ) ) > 0 ) {
wmflag = false ;
}
}
String type = Util . null2String ( req . getParameter ( "type" ) ) ;
Boolean _ec_ismobile = Boolean . valueOf ( req . getParameter ( "_ec_ismobile" ) ) ;
String fromdocmobile = Util . null2String ( req . getParameter ( "from_doc_mobile" ) ) ;
Boolean from_doc_mobile = fromdocmobile . equals ( "1" ) ? true : false ;
baseBean . writeLog ( FileDownload . class . getName ( ) , type ) ;
baseBean . writeLog ( FileDownload . class . getName ( ) , _ec_ismobile ) ;
baseBean . writeLog ( FileDownload . class . getName ( ) , fromdocmobile ) ;
baseBean . writeLog ( FileDownload . class . getName ( ) , fromdocmobile ) ;
baseBean . writeLog ( FileDownload . class . getName ( ) , "download:" + Util . null2String ( req . getParameter ( "download" ) ) ) ;
baseBean . writeLog ( "路径" + req . getRequestURI ( ) ) ;
writeLogs ( "download start!" ) ;
writeLogs ( "downloadFlag=" + Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2447956 wgs
int nolog = Util . getIntValue ( Util . null2String ( req . getParameter ( "nolog" ) ) , 0 ) ;
String res_content_disposition = Util . null2String ( req . getParameter ( "response-content-disposition" ) ) ;
boolean isMobileDown = false ;
if ( _ec_ismobile | | from_doc_mobile | | ! "" . equals ( res_content_disposition ) ) {
isMobileDown = true ;
}
if ( "showMould" . equals ( type ) | | "editMould" . equals ( type ) | | "printMould" . equals ( type ) ) {
downloadMould ( req , res , type ) ;
} else if ( "weboffice" . equals ( type ) ) {
downloadForWebOffice ( req , res ) ;
} else if ( "doccenter" . equals ( type ) ) {
downloadForDoccenterCoop ( req , res ) ;
} else if ( "document" . equals ( type ) ) {
User user = HrmUserVarify . getUser ( req , res ) ;
downloadForDocument ( req , res , user , wmflag ) ;
} else if ( "ofd" . equals ( type ) ) {
User user = HrmUserVarify . getUser ( req , res ) ;
downloadOfd ( req , res , user ) ;
} else if ( "odocExchange" . equals ( type ) ) {
downloadForExchange ( req , res ) ;
} else if ( "exportHtmlView" . equals ( type ) ) {
ExportHtmlViewMould ehvm = new ExportHtmlViewMould ( ) ;
int fileid = Util . getIntValue ( req . getParameter ( "fileid" ) ) ;
Map < String , String > dataMap = ehvm . toExport ( fileid ) ;
String zipPath = dataMap . get ( "zipPath" ) ;
String filename = dataMap . get ( "zipName" ) ;
if ( zipPath ! = null & & ! zipPath . isEmpty ( ) ) {
ServletOutputStream out = null ;
InputStream imagefile = null ;
try {
if ( ( agent . contains ( "Firefox" ) | | agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
res . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
} catch ( Exception ecode ) {
ecode . printStackTrace ( ) ;
}
try {
imagefile = new FileInputStream ( zipPath ) ;
out = res . getOutputStream ( ) ;
res . setContentType ( "application/x-download" ) ;
byte [ ] data = new byte [ 2048 ] ;
int byteread = 0 ;
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
}
catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( out ! = null ) out . close ( ) ;
ImportHtmlViewMould ihvm = new ImportHtmlViewMould ( ) ;
ihvm . delTempFile ( zipPath ) ;
ihvm . delTempFile ( zipPath . replace ( ".zip" , "" ) ) ;
}
}
} else if ( "Email" . equals ( type ) ) {
downloadForEmaill ( req , res ) ;
} else if ( ! "netimag" . equals ( type ) ) {
String clientEcoding = "GBK" ;
try
{
String acceptlanguage = Util . null2String ( req . getHeader ( "Accept-Language" ) ) ;
if ( ! "" . equals ( acceptlanguage ) )
acceptlanguage = acceptlanguage . toLowerCase ( ) ;
if ( acceptlanguage . indexOf ( "zh-tw" ) > - 1 | | acceptlanguage . indexOf ( "zh-hk" ) > - 1 )
{
clientEcoding = "BIG5" ;
}
else
{
clientEcoding = "GBK" ;
}
}
catch ( Exception e )
{
writeLogs ( e ) ;
}
agent = Util . null2String ( req . getHeader ( "user-agent" ) ) ;
String frompdfview = Util . null2String ( req . getParameter ( "frompdfview" ) ) ;
String downloadBatch = Util . null2String ( req . getParameter ( "downloadBatch" ) ) ;
//只下载附件,而不是下载文档的附件
String onlydownloadfj = Util . null2String ( req . getParameter ( "onlydownloadfj" ) ) ;
/*==============td26423 流程中批量下载 start=========================================================*/
if ( downloadBatch ! = null & & "1" . equals ( downloadBatch ) ) { //批量下载---传入的是文档的ids
//req.setCharacterEncoding("ISO8859-1");
String ipstring = Util . getIpAddr ( req ) ;
String currentDateTime = new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) ;
String docids = Util . null2String ( req . getParameter ( "fieldvalue" ) ) ; //docids 以逗号隔开的
if ( ! "" . equals ( docids ) ) {
String [ ] docidsarray = docids . split ( "," ) ;
if ( docidsarray ! = null & & docidsarray . length > 0 ) {
String newdocids = "" ;
for ( String newdocid : docidsarray ) {
if ( Util . getIntValue ( newdocid ) > 0 ) {
String secondAuthFileDownUrl = getSecondAuthFileDownUrl ( req , isMobileDown , Util . getIntValue ( newdocid ) ) ;
if ( ! "" . equals ( secondAuthFileDownUrl ) ) {
res . sendRedirect ( secondAuthFileDownUrl ) ;
return ;
}
if ( "" . equals ( newdocids ) ) {
newdocids = newdocid ;
} else {
newdocids + = "," + newdocid ;
}
}
}
docids = newdocids ;
}
}
String displayUsage = Util . null2String ( req . getParameter ( "displayUsage" ) ) ;
String tempFlag1 = "" ;
if ( docids ! = null & & ! "" . equals ( docids ) ) {
tempFlag1 = docids . substring ( docids . length ( ) - 1 ) ;
}
if ( tempFlag1 . equals ( "," ) ) docids = docids . substring ( 0 , docids . length ( ) - 1 ) ;
String delImgIds = Util . null2String ( req . getParameter ( "delImgIds" ) ) ; //imgeFileids 以逗号隔开的
String tempFlag = "" ;
if ( delImgIds ! = null & & ! "" . equals ( delImgIds ) ) {
tempFlag = delImgIds . substring ( delImgIds . length ( ) - 1 ) ;
}
if ( tempFlag . equals ( "," ) ) delImgIds = delImgIds . substring ( 0 , delImgIds . length ( ) - 1 ) ;
String docSearchFlag = Util . null2String ( req . getParameter ( "docSearchFlag" ) ) ; //docSearchFlag ='1-标记为从查询文档中来批量下载多文档的多附件'
String requestname = "" ;
//String requestname = Util.null2String(req.getParameter("requestname"));//requestname 流程标题
//requestname =new String(requestname.getBytes("UTF-8"));
RecordSet rsimagefileid = new RecordSet ( ) ;
String requestid = Util . null2String ( req . getParameter ( "requestid" ) ) ; //requestname 流程标题
if ( Util . getIntValue ( requestid ) > 0 ) {
String sqlrequestname = "select requestname from workflow_requestbase where requestid='" + requestid + "'" ;
rsimagefileid . executeSql ( sqlrequestname ) ;
if ( rsimagefileid . next ( ) ) {
requestname = Util . null2String ( rsimagefileid . getString ( "requestname" ) ) ;
}
}
requestname = Util . StringReplace ( requestname , "/" , "/ " ) ;
String download = Util . null2String ( req . getParameter ( "download" ) ) ;
User loginuser = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
String userid = Util . null2String ( req . getParameter ( "f_weaver_belongto_userid" ) ) ;
if ( "" . equals ( userid ) | | userid = = null ) {
userid = loginuser . getUID ( ) + "" ;
}
//String loginid=loginuser.getLoginid();
//String[] docidsList = Util.TokenizerString2(docids, ",");
//List docImagefileidList= new ArrayList();
String docImagefileids = "" ;
String sqlimagefileid = "select a.id,a.docsubject,b.imagefileid,b.imagefilename from DocDetail a,DocImageFile b where a.id=b.docid and a.id in (" + docids + ") and b.versionId = (select MAX(c.versionId) from DocImageFile c where c.id=b.id ) order by a.id asc" ;
/ *
String sqlimagefileid = "" ;
if ( "1" . equals ( docSearchFlag ) ) { //处理从查询文档中 来的文档附件批量下载时只下载最新版本问题
sqlimagefileid = "select a.id,a.docsubject,b.imagefileid,b.imagefilename from DocDetail a,DocImageFile b where a.id=b.docid and a.id in (" + docids + ") and b.versionId = (select MAX(c.versionId) from DocImageFile c where c.id=b.id ) order by a.id asc" ;
} else {
sqlimagefileid = "select a.id,a.docsubject,b.imagefileid,b.imagefilename from DocDetail a,DocImageFile b where a.id=b.docid and a.id in (" + docids + ") order by a.id asc" ;
}
* /
String docsubject = "" ;
rsimagefileid . executeSql ( sqlimagefileid ) ;
int counts = rsimagefileid . getCounts ( ) ;
String urlType = Util . null2String ( req . getParameter ( "urlType" ) ) ;
if ( counts < = 0 ) {
if ( "1" . equals ( docSearchFlag ) ) {
if ( urlType . equals ( "10" ) ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/docs/search/DocCommonContent.jsp?urlType=10&displayUsage=" + displayUsage ) ;
} else {
res . sendRedirect ( GCONST . getContextPath ( ) + "/docs/search/DocCommonContent.jsp?urlType=6&fromUrlType=1&displayUsage=" + displayUsage ) ;
}
return ;
} else {
res . sendRedirect ( GCONST . getContextPath ( ) + "/login/BatchDownloadsEror.jsp" ) ;
return ;
}
}
int num = 0 ;
while ( rsimagefileid . next ( ) ) {
num + + ;
if ( num = = counts ) {
docImagefileids + = Util . null2String ( rsimagefileid . getString ( "imagefileid" ) ) ;
} else {
docImagefileids + = Util . null2String ( rsimagefileid . getString ( "imagefileid" ) ) + "," ;
}
docsubject = Util . null2String ( rsimagefileid . getString ( "docsubject" ) ) ;
}
List filenameList = new ArrayList ( ) ;
List filerealpathList = new ArrayList ( ) ;
List filerealpathTempList = new ArrayList ( ) ;
List docidList = new ArrayList ( ) ;
List imagefileidList = new ArrayList ( ) ;
//List filerealpathTempParentList = new ArrayList();
File fileTemp = null ;
String sqlfilerealpath = "" ;
ImageFileManager imageFileManager = new ImageFileManager ( ) ;
if ( delImgIds ! = null & & ! "" . equals ( delImgIds ) ) {
//sqlfilerealpath="select imagefilename,filerealpath,iszip,isencrypt,imagefiletype , imagefileid, imagefile from ImageFile where imagefileid in ("+delImgIds+")";
sqlfilerealpath = "select t2.docid,t1.isaesencrypt,t1.comefrom,t1.aescode,t1.imagefilename,t1.filerealpath,t1.iszip,t1.isencrypt,t1.imagefiletype , t1.imagefileid, t1.imagefile,t2.imagefilename as realname from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid in (" + delImgIds + ") " + ( docids . equals ( "" ) ? "" : " and docid in(" + docids + ") " ) ;
} else {
//sqlfilerealpath="select imagefilename,filerealpath,iszip,isencrypt,imagefiletype , imagefileid, imagefile from ImageFile where imagefileid in ("+docImagefileids+")";
sqlfilerealpath = "select t2.docid,t1.isaesencrypt,t1.comefrom,t1.aescode,t1.imagefilename,t1.filerealpath,t1.iszip,t1.isencrypt,t1.imagefiletype , t1.imagefileid, t1.imagefile,t2.imagefilename as realname from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid in (" + docImagefileids + ") " + ( docids . equals ( "" ) ? "" : " and docid in(" + docids + ") " ) ;
}
rsimagefileid . executeSql ( sqlfilerealpath ) ;
String fromrequest = req . getParameter ( "fromrequest" ) ;
Map < String , String > filenameMap = new HashMap < String , String > ( ) ;
String imagefileid = "" ;
String pdfimagefileid = "" ; //office文档转换过来的PDFid
Map < String , Boolean > rightDoc = new HashMap < String , Boolean > ( ) ;
while ( rsimagefileid . next ( ) ) {
try {
imagefileid = Util . null2String ( rsimagefileid . getString ( "imagefileid" ) ) ;
String filename = Util . null2String ( rsimagefileid . getString ( "realname" ) ) ;
if ( filename . equals ( "" ) ) {
filename = Util . null2String ( rsimagefileid . getString ( "imagefilename" ) ) ;
}
String filerealpath = Util . null2String ( rsimagefileid . getString ( "filerealpath" ) ) ;
String iszip = Util . null2String ( rsimagefileid . getString ( "iszip" ) ) ;
String isencrypt = Util . null2String ( rsimagefileid . getString ( "isencrypt" ) ) ;
String isaesencrypt = Util . null2String ( rsimagefileid . getString ( "isaesencrypt" ) ) ;
String aescode = Util . null2String ( rsimagefileid . getString ( "aescode" ) ) ;
String _comefrom = Util . null2String ( rsimagefileid . getString ( "comefrom" ) ) ;
String _docid = Util . null2String ( rsimagefileid . getString ( "docid" ) ) ;
if ( ! _docid . isEmpty ( ) & & rightDoc . get ( _docid ) = = null ) {
boolean hasRight = getWhetherHasRight ( imagefileid , req , res , Util . getIntValue ( requestid ) , false , null ) ;
if ( ! hasRight & & ! HrmUserVarify . checkUserRight ( "DocFileBatchDownLoad:ALL" , loginuser ) )
continue ;
rightDoc . put ( _docid , true ) ;
}
int docidans1 = - 1 ;
/**流程下载附件,获取最新版本附件下载 start */
if ( "1" . equals ( fromrequest ) ) {
RecordSet rs = new RecordSet ( ) ;
rs . executeSql ( "select doceditionid,id from DocDetail where id=(select max(docid) from DocImageFile where imagefileid=" + imagefileid + ")" ) ;
if ( rs . next ( ) ) {
int doceditionid = rs . getInt ( "doceditionid" ) ;
int docid = rs . getInt ( "id" ) ;
docidans1 = docid ;
if ( doceditionid > 0 ) { //有多版本文档,取最新版本文档
rs . executeSql ( "select id from DocDetail where doceditionid=" + doceditionid + " order by docedition desc" ) ;
if ( rs . next ( ) ) {
docid = rs . getInt ( "id" ) ;
}
}
//在新版本文档下取最新附件
rs . executeSql ( "select f.imagefileid,f.imagefilename,f.filerealpath,d.imagefilename realname from DocImageFile d,imagefile f where d.imagefileid=f.imagefileid and d.docid=" + docid + " order by d.versionId desc" ) ;
if ( rs . next ( ) ) {
imagefileid = rs . getString ( "imagefileid" ) ;
filename = Util . null2String ( rsimagefileid . getString ( "realname" ) ) ;
if ( filename . equals ( "" ) ) {
filename = Util . null2String ( rsimagefileid . getString ( "imagefilename" ) ) ;
}
filerealpath = Util . null2String ( rsimagefileid . getString ( "filerealpath" ) ) ;
}
}
}
/**流程下载附件,获取最新附件 end */
if ( ! "DocLogAction_DocLogFile" . equals ( _comefrom ) & & FiledownloadUtil . isdownloadpdf ( filename ) & & download . equals ( "1" ) ) {
pdfimagefileid = FiledownloadUtil . getpdfidByOfficeid ( imagefileid ) ;
if ( pdfimagefileid . isEmpty ( ) ) {
pdfimagefileid = imagefileid ;
}
String pdffileinfosql = "select imagefilename,filerealpath from imagefile where imagefileid = ? " ;
RecordSet pdffileinfors = new RecordSet ( ) ;
pdffileinfors . executeQuery ( pdffileinfosql , pdfimagefileid ) ;
if ( pdffileinfors . next ( ) ) {
filename = Util . null2String ( pdffileinfors . getString ( "imagefilename" ) ) ;
filerealpath = Util . null2String ( pdffileinfors . getString ( "filerealpath" ) ) ;
}
} else {
pdfimagefileid = imagefileid ;
}
if ( ! "" . equals ( filename ) ) {
filename = filename . replace ( "&" , "&" ) ;
}
filenameList . add ( filename ) ;
filerealpathList . add ( filerealpath ) ;
docidList . add ( docidans1 ) ;
imagefileidList . add ( imagefileid ) ;
//是否需要记录日志
if ( addDownLoadLogByimageId ( Util . getIntValue ( imagefileid ) ) ) {
// 记录下载日志 begin
String userType = loginuser . getLogintype ( ) ;
if ( "1" . equals ( userType ) ) { // 如果是内部用户 名称就是 lastName
// 外部则入在 firstName里面
downloadLog ( loginuser . getUID ( ) , loginuser . getLastname ( ) , Util . getIntValue ( imagefileid ) , filename , ipstring ) ;
} else {
downloadLog ( loginuser . getUID ( ) , loginuser . getFirstname ( ) , Util . getIntValue ( imagefileid ) , filename , ipstring ) ;
}
// 记录下载日志 end
}
String extName = "" ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
InputStream imagefile = null ;
if ( ! "" . equals ( pdfimagefileid ) & & ! imagefileid . equals ( pdfimagefileid ) ) {
imageFileManager . getImageFileInfoById ( Util . getIntValue ( pdfimagefileid ) ) ;
} else {
imageFileManager . getImageFileInfoById ( Util . getIntValue ( imagefileid ) ) ;
}
//writeLogs("452 downloadFlag=" + downloadFlag);
imageFileManager . setDownloadFlag ( Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2298348 wgs
imagefile = imageFileManager . getInputStream ( ) ;
if ( download . equals ( "1" ) & & ( 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 ) {
writeLogs ( e ) ;
if ( bout ! = null ) bout . close ( ) ;
}
}
FileOutputStream out = null ;
try {
SystemComInfo syscominfo = new SystemComInfo ( ) ;
String fileFoder = syscominfo . getFilesystem ( ) ;
String fileFoderCompare = syscominfo . getFilesystem ( ) ;
if ( "" . equals ( fileFoder ) ) {
fileFoder = GCONST . getRootPath ( ) ;
fileFoder = fileFoder + "filesystem" + File . separatorChar + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
} else {
if ( fileFoder . endsWith ( File . separator ) ) {
fileFoder + = "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
} else {
fileFoder + = File . separator + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
}
}
String _fielname = UUID . randomUUID ( ) . toString ( ) ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
_fielname + = filename . substring ( bx , filename . length ( ) ) ;
}
}
if ( "" . equals ( fileFoderCompare ) ) {
fileFoderCompare = GCONST . getRootPath ( ) ;
fileFoderCompare = fileFoderCompare + "filesystem" + File . separatorChar + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
} else {
if ( fileFoderCompare . endsWith ( File . separator ) ) {
fileFoderCompare + = "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
} else {
fileFoderCompare + = File . separator + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
}
}
//附件文件重名加数字后缀区别:因为不加以区别的话,压缩到压缩包时只取一个文件(压缩包中不能有同名文件) 加唯一标识'_imagefileid'
for ( String m : filenameMap . keySet ( ) ) {
String keyValue = filenameMap . get ( m ) ;
if ( keyValue . equals ( filename ) ) {
String tepName = filename . contains ( "." ) ? filename . substring ( 0 , filename . indexOf ( "." ) ) : "" ;
if ( tepName ! = null & & ! "" . equals ( tepName ) ) {
String extNameTemp = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
filename = tepName + "_" + imagefileid + "." + extNameTemp ;
}
}
}
filenameMap . put ( _fielname , filename ) ;
//String fileFoder=GCONST.getRootPath()+ "downloadBatchTemp"+File.separatorChar+userid+File.separatorChar;//获取系统的运行目录 如: d:\ecology\
//String fileFoderCompare=GCONST.getRootPath()+ "downloadBatchTemp"+File.separatorChar+userid+File.separatorChar+filename;
String newFileName = _fielname ;
for ( int j = 0 ; j < filerealpathTempList . size ( ) ; j + + ) {
if ( fileFoderCompare . equals ( filerealpathTempList . get ( j ) ) ) {
int lastindex = filename . lastIndexOf ( "." ) ;
if ( lastindex > = 0 ) {
if ( ! "" . equals ( pdfimagefileid ) & & ! imagefileid . equals ( pdfimagefileid ) ) {
newFileName = filename . substring ( 0 , lastindex ) + "_" + pdfimagefileid + filename . substring ( lastindex ) ;
} else {
newFileName = filename . substring ( 0 , lastindex ) + "_" + imagefileid + filename . substring ( lastindex ) ;
}
} else {
if ( ! "" . equals ( pdfimagefileid ) & & ! imagefileid . equals ( pdfimagefileid ) ) {
newFileName = filename + "_" + pdfimagefileid ;
} else {
newFileName = filename + "_" + imagefileid ;
}
}
}
}
fileTemp = this . fileCreate ( fileFoder , newFileName ) ; //在系统的根目录下创建了一个文件夹(downloadBatchTemp)及附件文件
out = new FileOutputStream ( fileTemp ) ;
imagefile = FileManager . download ( req , imagefileid , filerealpath , aescode , iszip , isaesencrypt , imagefile ) ;
//=======================
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
String filerealpathTemp = fileTemp . getPath ( ) ;
//String filerealpathTempParent=fileTemp.getParent();
//filerealpathTempParentList.add(filerealpathTempParent);
//filerealpathTempList.add(filerealpathTemp);
filerealpathTempList . add ( fileFoder + newFileName ) ;
} catch ( Exception e ) {
writeLogs ( e ) ;
//do nothing
} finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( out ! = null ) out . flush ( ) ;
if ( out ! = null ) out . close ( ) ;
}
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
continue ;
}
}
if ( filerealpathList . size ( ) = = 0 ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v1" ) ;
return ;
}
//存储下载的文件路径 把临时存放的附件 打压缩包 提供给用户下载
File [ ] files = new File [ filerealpathList . size ( ) ] ;
for ( int i = 0 ; i < filerealpathTempList . size ( ) ; i + + ) {
String path = ( String ) filerealpathTempList . get ( i ) ;
files [ i ] = new File ( path ) ;
}
byte [ ] bt = new byte [ 8192 ] ;
SystemComInfo syscominfo2 = new SystemComInfo ( ) ;
String fileFoder2 = syscominfo2 . getFilesystem ( ) ;
if ( "" . equals ( fileFoder2 ) ) {
fileFoder2 = GCONST . getRootPath ( ) ;
fileFoder2 = fileFoder2 + "filesystem" + File . separatorChar + "downloadBatch" + File . separatorChar ;
} else {
if ( fileFoder2 . endsWith ( File . separator ) ) {
fileFoder2 + = "downloadBatch" + File . separatorChar ;
} else {
fileFoder2 + = File . separator + "downloadBatch" + File . separatorChar ;
}
}
//String fileFoder=GCONST.getRootPath()+ "downloadBatch"+File.separatorChar;//获取系统的运行目录 如: d:\ecology\
//String strs=requestname+"_"+userid+".zip";
String strs = "" ;
String tmptfilename = userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
if ( requestname ! = null & & ! "" . equals ( requestname ) ) { //附件从流程中来 文件名称: 流程名称_用户userid.zip
strs = requestname + "_" + userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
} else if ( "1" . equals ( docSearchFlag ) ) { //从查询文档中来批量下载多文档多附件 文件名称: 用户userid.zip
strs = userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
} else { //附件从文档中来 文件名称: 文档名称_用户userid.zip
//strs=docsubject+"_"+userid+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".zip";
strs = userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
}
File file = this . fileCreate ( fileFoder2 , tmptfilename ) ; //在系统的根目录下创建了一个文件夹(downloadBatch)及zip文件
String strzipName = file . getPath ( ) ;
//String fileTempParent=fileTemp.getParent();
String fileTempParent = null ;
if ( fileTemp ! = null ) {
fileTempParent = fileTemp . getParent ( ) ;
}
ZipOutputStream zout = null ;
InputStream is = null ;
try {
DocAddWaterForSecond docAddWaterForSecond = new DocAddWaterForSecond ( ) ;
zout = new ZipOutputStream ( new FileOutputStream ( strzipName ) , "UTF-8" ) ;
//循环下载每个文件并读取内容
//流程中附件批量下载
for ( int j = 0 ; j < files . length ; j + + ) {
try {
is = new FileInputStream ( files [ j ] ) ;
//System.out.println("第["+j+"]个文件的名称为:"+files[j].getName());
String filename = files [ j ] . getName ( ) ;
String fileid = Util . null2s ( ( String ) imagefileidList . get ( j ) , "" ) ;
String extName = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
// 2298348 wgs
//writeLogs("644 downloadFlag=" + downloadFlag);
if ( ! "1" . equals ( Util . null2String ( req . getParameter ( "download" ) ) ) ) {
is = EncryptDecryptFileUtil . fileDecrypt ( Util . getIntValue ( fileid ) , is , filename , "" ) ;
}
// 2298348 wgs
if ( ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
Map < String , Object > secWmSetMap = WaterMarkUtil . getCategoryWmSet ( imagefileid ) ;
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYDOWNLOAD ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtil . WATERCONTENTISNULL ) ) ) {
// is = WaterMarkUtil.takefileWater(is,loginuser,filename,Util.getIntValue(fileid),extName,WaterMarkUtil.MOULDDOC);
is = FileWaterManager . takewater ( req , fileid , filename , extName , is , WaterMarkUtil . MOULDDOC , - 1 ) ;
}
}
//ZipEntry ze=new ZipEntry(filenameMap.get(files[j].getAbsolutePath()));//设置文件编码格式
ZipEntry ze = new ZipEntry ( filenameMap . get ( files [ j ] . getName ( ) ) ) ; //设置文件编码格式
zout . putNextEntry ( ze ) ;
int len ;
//读取下载文件内容
while ( ( len = is . read ( bt ) ) > 0 ) {
zout . write ( bt , 0 , len ) ;
}
zout . closeEntry ( ) ;
is . close ( ) ;
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
continue ;
}
}
zout . close ( ) ;
this . toUpload ( res , strs , tmptfilename ) ; //调用下载方法
//String fileTempParent=fileTemp.getParent();
//this.deleteFile(fileTempParent);//下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
/ *
for ( int i = 0 ; i < filerealpathTempList . size ( ) ; i + + ) {
String delPathTemp = ( String ) filerealpathTempList . get ( i ) ;
this . deleteFile ( delPathTemp ) ; //下载完成后调用删除方法删除downloadBatchTemp临时文件夹中存放的附件文件
} * /
//this.deleteFile(strzipName);//下载完成后调用删除文件的方法删除downloadBatch文件夹中的.zip文件
} catch ( FileNotFoundException e ) {
e . printStackTrace ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
} finally {
if ( is ! = null ) {
is . close ( ) ;
}
if ( zout ! = null ) {
zout . close ( ) ;
}
this . deleteFile ( strzipName ) ; //下载完成后调用删除文件的方法删除downloadBatch文件夹中的.zip文件
//this.deleteFile(fileTempParent);//下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
if ( fileTempParent ! = null ) {
//new weaver.filter.XssUtil().writeLog("=====L402------"+fileTempParent);
this . deleteFile ( fileTempParent ) ; //下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
}
}
/*==============td26423 流程中批量下载 end============================================================*/
} else if ( onlydownloadfj ! = null & & "1" . equals ( onlydownloadfj ) ) { //批量下载--来自于证照, 只批量下载附件, 传入的是附件的ids
/*============== 证照批量下载附件 start============================================================*/
String currentDateTime = new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) ;
String fieldids = Util . null2String ( DocDownloadCheckUtil . getDownloadfileid ( req ) ) ; //fieldids 以逗号隔开的
int labelid = Util . getIntValue ( Util . null2String ( req . getParameter ( "labelid" ) ) , 0 ) ;
String download = Util . null2String ( req . getParameter ( "download" ) ) ;
User loginuser = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
String userid = loginuser . getUID ( ) + "" ;
File fileTemp = null ;
if ( ! "" . equals ( fieldids ) & & fieldids . length ( ) > 0 ) {
fieldids = fieldids . substring ( 0 , fieldids . length ( ) - 1 ) ;
}
toWriteLog ( "onlydownloadfj----1----批量下载--fieldids: " + fieldids + "--labelid:" + labelid + "--userid:" + userid + "--download:" + download ) ;
if ( ! "" . equals ( fieldids ) ) {
String [ ] fieldidsarray = fieldids . split ( "," ) ;
String newfieldids = "" ;
for ( String newfileid : fieldidsarray ) {
if ( Util . getIntValue ( newfileid ) > 0 ) {
if ( "" . equals ( newfieldids ) ) {
newfieldids = newfileid ;
} else {
newfieldids + = "," + newfileid ;
}
}
}
fieldids = newfieldids ;
String [ ] newfieldidsarray = fieldids . split ( "," ) ;
RecordSet rsprop = new RecordSet ( ) ;
String secondAuthsql = " select distinct docid from docImageFile where imagefileid in (" + fieldids + ")" ;
rsprop . executeSql ( secondAuthsql ) ;
while ( rsprop . next ( ) ) {
int docid = Util . getIntValue ( rsprop . getString ( "docid" ) ) ;
if ( docid > 0 ) {
String secondAuthFileDownUrl = getSecondAuthFileDownUrl ( req , isMobileDown , docid ) ;
if ( ! "" . equals ( secondAuthFileDownUrl ) ) {
res . sendRedirect ( secondAuthFileDownUrl ) ;
return ;
}
}
}
int maxDownFileCount = Util . getIntValue ( rsprop . getPropValue ( "BatchDownFileControl" , "maxDownFileCount" ) , 10 ) ;
int maxDownFileTotalSize = Util . getIntValue ( rsprop . getPropValue ( "BatchDownFileControl" , "maxDownFileTotalSize" ) , 200 ) ;
if ( newfieldidsarray . length > maxDownFileCount ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/sysRemindDocpreview.jsp?labelid=" + SystemEnv . getHtmlLabelName ( 534454 , loginuser . getLanguage ( ) ) + maxDownFileCount ) ;
return ;
} else {
String dbType = rsprop . getDBType ( ) ;
String sql = " select sum(fileSize) totalfilesize from ImageFile where imagefileid in (" + fieldids + ")" ;
if ( "sqlserver" . equals ( dbType ) ) {
sql = " select SUM(cast(filesize as numeric(30,0))) totalfilesize from ImageFile where imagefileid in (" + fieldids + ")" ;
}
rsprop . executeSql ( sql ) ;
if ( rsprop . next ( ) ) {
double totalfilesize = Util . getDoubleValue ( rsprop . getString ( "totalfilesize" ) , 0 ) ;
if ( totalfilesize > maxDownFileTotalSize * 1024 * 1024 ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/sysRemindDocpreview.jsp?labelid=" + SystemEnv . getHtmlLabelName ( 534453 , loginuser . getLanguage ( ) ) + maxDownFileTotalSize ) ;
return ;
}
}
}
} else {
return ;
}
List filenameList = new ArrayList ( ) ;
List filerealpathList = new ArrayList ( ) ;
List filerealpathTempList = new ArrayList ( ) ;
List < Integer > fileids = new ArrayList < Integer > ( ) ;
String sqlfilerealpath = "" ;
ImageFileManager imageFileManager = new ImageFileManager ( ) ;
sqlfilerealpath = "select * from imagefile where imagefileid in(" + fieldids + ") " ;
RecordSet rsimagefileid = new RecordSet ( ) ;
rsimagefileid . executeSql ( sqlfilerealpath ) ;
String imagefileid = "" ;
String pdfimagefileid = "" ;
Map < String , String > filenameMap = new HashMap < String , String > ( ) ;
while ( rsimagefileid . next ( ) ) {
String downloadpdfimagefileid = "" ;
try {
imagefileid = Util . null2String ( rsimagefileid . getString ( "imagefileid" ) ) ;
String filename = Util . null2String ( rsimagefileid . getString ( "realname" ) ) ;
if ( filename . equals ( "" ) ) {
filename = Util . null2String ( rsimagefileid . getString ( "imagefilename" ) ) ;
}
String filerealpath = Util . null2String ( rsimagefileid . getString ( "filerealpath" ) ) ;
String iszip = Util . null2String ( rsimagefileid . getString ( "iszip" ) ) ;
String isencrypt = Util . null2String ( rsimagefileid . getString ( "isencrypt" ) ) ;
String isaesencrypt = Util . null2String ( rsimagefileid . getString ( "isaesencrypt" ) ) ;
String aescode = Util . null2String ( rsimagefileid . getString ( "aescode" ) ) ;
String _comefrom = Util . null2String ( rsimagefileid . getString ( "comefrom" ) ) ;
boolean hasRight = getWhetherHasRight ( imagefileid , req , res , Util . getIntValue ( req . getParameter ( "requestid" ) ) , false , null ) ;
toWriteLog ( "onlydownloadfj----2----批量下载--imagefileid: " + imagefileid + "--filename:"
+ filename + "--userid:" + userid + "--filerealpath:" + filerealpath + "--hasRight:" + hasRight ) ;
if ( ! hasRight )
continue ;
if ( ! "DocLogAction_DocLogFile" . equals ( _comefrom ) & & FiledownloadUtil . isdownloadpdf ( filename ) & & download . equals ( "1" ) ) {
pdfimagefileid = FiledownloadUtil . getpdfidByOfficeid ( imagefileid ) ;
if ( pdfimagefileid . isEmpty ( ) ) {
pdfimagefileid = imagefileid ;
}
String pdffileinfosql = "select imagefilename,filerealpath from imagefile where imagefileid = ? " ;
RecordSet pdffileinfors = new RecordSet ( ) ;
pdffileinfors . executeQuery ( pdffileinfosql , pdfimagefileid ) ;
if ( pdffileinfors . next ( ) ) {
filename = Util . null2String ( pdffileinfors . getString ( "imagefilename" ) ) ;
filerealpath = Util . null2String ( pdffileinfors . getString ( "filerealpath" ) ) ;
}
} else {
pdfimagefileid = imagefileid ;
}
String extName = "" ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
if ( ImageConvertUtil . canConvertPdfForDownload ( extName , imagefileid ) & & ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
RecordSet rsrecord = new RecordSet ( ) ;
PdfConvertUtil pdfConvertUtil = new PdfConvertUtil ( ) ;
int pdfid = pdfConvertUtil . convertPdf ( Util . getIntValue ( imagefileid ) ) ;
if ( pdfid > 0 ) {
downloadpdfimagefileid = String . valueOf ( pdfid ) ;
String pdffileinfosql = "select imagefilename,filerealpath from imagefile where imagefileid = ? " ;
RecordSet pdffileinfors = new RecordSet ( ) ;
pdffileinfors . executeQuery ( pdffileinfosql , downloadpdfimagefileid ) ;
if ( pdffileinfors . next ( ) ) {
filename = filename . substring ( 0 , filename . lastIndexOf ( "." ) ) + ".pdf" ;
filerealpath = Util . null2String ( pdffileinfors . getString ( "filerealpath" ) ) ;
}
}
}
if ( downloadpdfimagefileid . isEmpty ( ) ) {
downloadpdfimagefileid = imagefileid + "" ;
}
if ( ! "" . equals ( filename ) ) {
filename = filename . replace ( "&" , "&" ) ;
}
filenameList . add ( filename ) ;
filerealpathList . add ( filerealpath ) ;
fileids . add ( Util . getIntValue ( downloadpdfimagefileid ) ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
InputStream imagefile = null ;
if ( ! "" . equals ( pdfimagefileid ) & & ! imagefileid . equals ( pdfimagefileid ) ) {
imageFileManager . getImageFileInfoById ( Util . getIntValue ( pdfimagefileid ) ) ;
} else {
imageFileManager . getImageFileInfoById ( Util . getIntValue ( imagefileid ) ) ;
}
//writeLogs("863 downloadFlag=" + downloadFlag);
imageFileManager . setDownloadFlag ( Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2298348 wgs
imagefile = imageFileManager . getInputStream ( ) ;
if ( download . equals ( "1" ) & & ( 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 ) {
writeLogs ( e ) ;
if ( bout ! = null ) bout . close ( ) ;
}
}
FileOutputStream out = null ;
try {
SystemComInfo syscominfo = new SystemComInfo ( ) ;
String fileFoder = syscominfo . getFilesystem ( ) ;
String fileFoderCompare = syscominfo . getFilesystem ( ) ;
if ( "" . equals ( fileFoder ) ) {
fileFoder = GCONST . getRootPath ( ) ;
fileFoder = fileFoder + "filesystem" + File . separatorChar + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
} else {
if ( fileFoder . endsWith ( File . separator ) ) {
fileFoder + = "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
} else {
fileFoder + = File . separator + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar ;
}
}
String _fielname = UUID . randomUUID ( ) . toString ( ) ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
_fielname + = filename . substring ( bx , filename . length ( ) ) ;
}
}
if ( "" . equals ( fileFoderCompare ) ) {
fileFoderCompare = GCONST . getRootPath ( ) ;
fileFoderCompare = fileFoderCompare + "filesystem" + File . separatorChar + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
} else {
if ( fileFoderCompare . endsWith ( File . separator ) ) {
fileFoderCompare + = "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
} else {
fileFoderCompare + = File . separator + "downloadBatchTemp" + File . separatorChar + userid + currentDateTime + File . separatorChar + _fielname ;
}
}
toWriteLog ( "onlydownloadfj----3----批量下载--imagefileid: " + imagefileid + "--filename:"
+ filename + "--userid:" + userid + "--fileFoder:" + fileFoder + "--fileFoderCompare:" + fileFoderCompare ) ;
//String fileFoder=GCONST.getRootPath()+ "downloadBatchTemp"+File.separatorChar+userid+File.separatorChar;//获取系统的运行目录 如: d:\ecology\
//附件文件重名加数字后缀区别:因为不加以区别的话,压缩到压缩包时只取一个文件(压缩包中不能有同名文件) 加唯一标识'_imagefileid'
//String fileFoderCompare=GCONST.getRootPath()+ "downloadBatchTemp"+File.separatorChar+userid+File.separatorChar+filename;
//附件文件重名加数字后缀区别:因为不加以区别的话,压缩到压缩包时只取一个文件(压缩包中不能有同名文件) 加唯一标识'_imagefileid'
for ( String m : filenameMap . keySet ( ) ) {
String keyValue = filenameMap . get ( m ) ;
if ( keyValue . equals ( filename ) ) {
String tepName = filename . contains ( "." ) ? filename . substring ( 0 , filename . indexOf ( "." ) ) : "" ;
if ( tepName ! = null & & ! "" . equals ( tepName ) ) {
String extNameTemp = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
filename = tepName + "_" + imagefileid + "." + extNameTemp ;
}
}
}
filenameMap . put ( _fielname , filename ) ;
String newFileName = _fielname ;
toWriteLog ( "onlydownloadfj----4----批量下载--imagefileid: " + imagefileid + "--filename:"
+ filename + "--userid:" + userid + "--fileFoder:" + fileFoder + "--fileFoderCompare:" + fileFoderCompare
+ "--newFileName:" + newFileName + "--filerealpathTempList:" + filerealpathTempList + "--out:" + filerealpathTempList
+ "--imagefile:" + imagefile ) ;
fileTemp = this . fileCreate ( fileFoder , newFileName ) ; //在系统的根目录下创建了一个文件夹(downloadBatchTemp)及附件文件
out = new FileOutputStream ( fileTemp ) ;
imagefile = FileManager . download ( req , imagefileid , filerealpath , aescode , iszip , isaesencrypt , imagefile ) ;
Map < String , Object > secWmSetMap = WaterMarkUtilNew . getCategoryWmSet ( imagefileid ) ;
//writeLogs("957 imagefileid=" + imagefileid);
shouldAddFileDownLoadWm ( secWmSetMap , imagefileid , Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2447956 wgs
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtilNew . SECCATEGORYDOWNLOAD ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtilNew . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtilNew . WATERCONTENTISNULL ) ) ) {
imagefile = FileWaterManager . takewater ( req , downloadpdfimagefileid , filename , extName , imagefile , WaterMarkUtil . MOULDDOC , Util . getIntValue ( imagefileid ) ) ;
}
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
String filerealpathTemp = fileTemp . getPath ( ) ;
//String filerealpathTempParent=fileTemp.getParent();
//filerealpathTempParentList.add(filerealpathTempParent);
//filerealpathTempList.add(filerealpathTemp);
filerealpathTempList . add ( fileFoder + newFileName ) ;
} catch ( Exception e ) {
//do nothing
e . printStackTrace ( ) ;
} finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( out ! = null ) out . flush ( ) ;
if ( out ! = null ) out . close ( ) ;
}
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
continue ;
}
}
if ( filerealpathList . size ( ) = = 0 ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v2" ) ;
return ;
}
toWriteLog ( "onlydownloadfj----5----批量下载--filerealpathList: " + filerealpathList + "--filerealpathTempList:"
+ filerealpathTempList + "--userid:" + userid ) ;
//存储下载的文件路径 把临时存放的附件 打压缩包 提供给用户下载
File [ ] files = new File [ filerealpathList . size ( ) ] ;
for ( int i = 0 ; i < filerealpathTempList . size ( ) ; i + + ) {
String path = ( String ) filerealpathTempList . get ( i ) ;
files [ i ] = new File ( path ) ;
}
byte [ ] bt = new byte [ 8192 ] ;
SystemComInfo syscominfo2 = new SystemComInfo ( ) ;
String fileFoder2 = syscominfo2 . getFilesystem ( ) ;
if ( "" . equals ( fileFoder2 ) ) {
fileFoder2 = GCONST . getRootPath ( ) ;
fileFoder2 = fileFoder2 + "filesystem" + File . separatorChar + "downloadBatch" + File . separatorChar ;
} else {
if ( fileFoder2 . endsWith ( File . separator ) ) {
fileFoder2 + = "downloadBatch" + File . separatorChar ;
} else {
fileFoder2 + = File . separator + "downloadBatch" + File . separatorChar ;
}
}
toWriteLog ( "onlydownloadfj----5----批量下载--fileFoder2: " + fileFoder2 + "--filerealpathTempList:"
+ filerealpathTempList + "--userid:" + userid ) ;
//String fileFoder=GCONST.getRootPath()+ "downloadBatch"+File.separatorChar;//获取系统的运行目录 如: d:\ecology\
//String strs=requestname+"_"+userid+".zip";
//附件的名字
String strs = SystemEnv . getHtmlLabelName ( labelid , loginuser . getLanguage ( ) ) + "_" + userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
String tmptfilename = userid + new SimpleDateFormat ( "yyyyMMddHHmmss" ) . format ( new Date ( ) ) + ".zip" ;
toWriteLog ( "onlydownloadfj----5----批量下载--strs: " + strs + "--userid:" + userid + "--fileFoder2:" + fileFoder2 ) ;
File file = this . fileCreate ( fileFoder2 , tmptfilename ) ; //在系统的根目录下创建了一个文件夹(downloadBatch)及zip文件
toWriteLog ( "onlydownloadfj----5----批量下载--strs: " + strs + "--userid:" + userid + "--file:" + file ) ;
String strzipName = file . getPath ( ) ;
toWriteLog ( "onlydownloadfj----5----批量下载--strs: " + strs + "--userid:" + userid + "--strzipName:" + strzipName ) ;
//String fileTempParent=fileTemp.getParent();
String fileTempParent = null ;
if ( fileTemp ! = null ) {
fileTempParent = fileTemp . getParent ( ) ;
}
ZipOutputStream zout = null ;
InputStream is = null ;
try {
DocAddWaterForSecond docAddWaterForSecond = new DocAddWaterForSecond ( ) ;
zout = new ZipOutputStream ( new FileOutputStream ( strzipName ) , "UTF-8" ) ;
//循环下载每个文件并读取内容
//文档中附件批量下载
for ( int j = 0 ; j < files . length ; j + + ) {
try {
is = new FileInputStream ( files [ j ] ) ;
// System.out.println("第["+j+"]个文件的名称为:"+files[j].getName());
String filename = files [ j ] . getName ( ) ;
String extName = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
// 2298348 wgs
//writeLogs("1046 downloadFlag=" + downloadFlag);
if ( ! "1" . equals ( Util . null2String ( req . getParameter ( "download" ) ) ) ) {
is = EncryptDecryptFileUtil . fileDecrypt ( fileids . get ( j ) , is , filename , "" ) ;
}
// 2298348 wgs
if ( ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
Map < String , Object > secWmSetMap = WaterMarkUtil . getCategoryWmSet ( imagefileid ) ;
//writeLogs("1053 imagefileid=" + imagefileid);
shouldAddFileDownLoadWm ( secWmSetMap , imagefileid , Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2447956 wgs
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYDOWNLOAD ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtil . WATERCONTENTISNULL ) ) ) {
// is = WaterMarkUtil.takefileWater(is,loginuser,filename,fileids.get(j),extName,WaterMarkUtil.MOULDDOC);
is = FileWaterManager . takewater ( req , fileids . get ( j ) + "" , filename , extName , is , WaterMarkUtil . MOULDDOC , - 1 ) ;
}
}
ZipEntry ze = new ZipEntry ( filenameMap . get ( files [ j ] . getName ( ) ) ) ; //设置文件编码格式
zout . putNextEntry ( ze ) ;
int len ;
//读取下载文件内容
while ( ( len = is . read ( bt ) ) > 0 ) {
zout . write ( bt , 0 , len ) ;
}
zout . closeEntry ( ) ;
is . close ( ) ;
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
continue ;
}
}
zout . close ( ) ;
this . toUpload ( res , strs , tmptfilename ) ; //调用下载方法
//String fileTempParent=fileTemp.getParent();
//this.deleteFile(fileTempParent);//下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
/ *
for ( int i = 0 ; i < filerealpathTempList . size ( ) ; i + + ) {
String delPathTemp = ( String ) filerealpathTempList . get ( i ) ;
this . deleteFile ( delPathTemp ) ; //下载完成后调用删除方法删除downloadBatchTemp临时文件夹中存放的附件文件
} * /
//this.deleteFile(strzipName);//下载完成后调用删除文件的方法删除downloadBatch文件夹中的.zip文件
} catch ( FileNotFoundException e ) {
e . printStackTrace ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
} finally {
if ( is ! = null ) {
is . close ( ) ;
}
if ( zout ! = null ) {
zout . close ( ) ;
}
this . deleteFile ( strzipName ) ; //下载完成后调用删除文件的方法删除downloadBatch文件夹中的.zip文件
//this.deleteFile(fileTempParent);//下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
if ( fileTempParent ! = null ) {
// new weaver.filter.XssUtil().writeLog("=====L622------"+strzipName);
this . deleteFile ( fileTempParent ) ; //下载完成后调用删除文件的方法删除downloadBatchTemp文件夹下的子文件夹
}
}
/*============== 证照批量下载附件 end============================================================*/
} else {
int fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
toWriteLog ( "weaver---870----fileid:" + fileid ) ;
String coworkid = Util . getFileidIn ( Util . null2String ( req . getParameter ( "coworkid" ) ) ) ;
int requestid = Util . getIntValue ( req . getParameter ( "requestid" ) ) ;
String ipstring = Util . getIpAddr ( req ) ;
Map < String , Object > jsonParams = new HashMap < String , Object > ( ) ;
boolean fromMobile = false ;
int userid = 0 ;
jsonParams = Json2MapUtil . requestJson2Map ( req ) ;
if ( fileid < = 0 ) {
fileid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "fileid" ) ) ) ;
fromMobile = true ;
userid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "userid" ) ) ) ;
requestid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "requestid" ) ) ) ;
}
String ddcode = req . getParameter ( "ddcode" ) ;
int codeuserid = 0 ;
User userddcode = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
if ( ddcode ! = null & & ! ddcode . isEmpty ( ) & & userddcode = = null ) {
try {
Map < String , Object > ddcodeMap = SystemDocUtil . deDdcode ( userddcode , ddcode ) ;
String isovertime = Util . null2String ( ddcodeMap . get ( SystemDocUtil . ISOVERTIME ) ) ;
if ( "1" . equals ( isovertime ) ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?ddcodeTimeout=1" ) ;
return ;
} else {
userid = Util . getIntValue ( ( String ) ddcodeMap . get ( SystemDocUtil . USERID ) ) ;
String fileidcode = Util . null2String ( ddcodeMap . get ( SystemDocUtil . FILEID ) ) ;
fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileidstr ( fileidcode ) ) ;
fromMobile = true ;
//如果有次账号, userid给次账号的
String f_weaver_belongto_userid = Util . null2s ( req . getParameter ( "f_weaver_belongto_userid" ) , "" ) ;
if ( ! "" . equals ( f_weaver_belongto_userid ) ) {
userid = Util . getIntValue ( f_weaver_belongto_userid ) ;
}
jsonParams = Json2MapUtil . requestJson2Map ( req ) ;
jsonParams . put ( "userid" , userid ) ;
codeuserid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "userid" ) ) ) ;
}
} catch ( Exception e ) {
writeLogs ( e ) ;
}
}
if ( fileid < = 0 ) { //转化为int型, 防止SQL注入
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v3" ) ;
return ;
}
RecordSet rsprop = new RecordSet ( ) ;
String secondAuthsql = " select distinct docid from docImageFile where imagefileid =?" ;
rsprop . executeQuery ( secondAuthsql , fileid ) ;
while ( rsprop . next ( ) ) {
int newdocid = Util . getIntValue ( rsprop . getString ( "docid" ) ) ;
if ( newdocid > 0 ) {
String secondAuthFileDownUrl = getSecondAuthFileDownUrl ( req , isMobileDown , newdocid ) ;
if ( ! "" . equals ( secondAuthFileDownUrl ) ) {
res . sendRedirect ( secondAuthFileDownUrl ) ;
return ;
}
}
}
/**流程下载附件,获取最新版本附件下载 start */
String fromrequest = req . getParameter ( "fromrequest" ) ;
if ( "1" . equals ( fromrequest ) ) {
RecordSet rs = new RecordSet ( ) ;
rs . executeSql ( "select doceditionid,id from DocDetail where id=(select max(docid) from DocImageFile where imagefileid=" + fileid + ")" ) ;
if ( rs . next ( ) ) {
int doceditionid = rs . getInt ( "doceditionid" ) ;
int docid = rs . getInt ( "id" ) ;
if ( doceditionid > 0 ) { //有多版本文档,取最新版本文档
rs . executeSql ( "select id from DocDetail where doceditionid=" + doceditionid + " order by docedition desc" ) ;
if ( rs . next ( ) ) {
docid = rs . getInt ( "id" ) ;
}
}
rs . executeQuery ( "select id from DocImageFile where imagefileid=? and (isextfile is null or isextfile <> '1' ) and docfiletype <> '1'" , fileid ) ;
boolean isOfficeFile = false ;
if ( rs . next ( ) ) {
isOfficeFile = true ;
}
//在新版本文档下取最新附件
String sql = "select id,imagefileid from DocImageFile where docid=? " ;
if ( isOfficeFile ) {
sql + = " and (isextfile is null or isextfile <> '1' ) and docfiletype <> '1'" ;
} else {
sql + = " and isextfile='1'" ;
}
sql + = "order by versionId desc" ;
rs . executeQuery ( sql , docid ) ;
int firstId = 0 ;
int i = 0 ;
int _id = 0 ;
while ( rs . next ( ) ) {
if ( i = = 0 ) {
firstId = rs . getInt ( "imagefileid" ) ;
_id = rs . getInt ( "id" ) ;
if ( isOfficeFile )
break ;
} else {
if ( _id ! = rs . getInt ( "id" ) ) { //一个文档下有多个附件, 则不再下载最新, 按照传的id下载
firstId = fileid ;
break ;
}
}
i + + ;
}
fileid = firstId ;
}
}
/**流程下载附件,获取最新附件 end */
//String strSql="select docpublishtype from docdetail where id in (select docid from docimagefile where imagefileid="+fileid+") and ishistory <> 1";
RecordSet statement = new RecordSet ( ) ; //by ben 开启连接后知道文件下载才关闭,数据库连接时间太长
//RecordSet rs =new RecordSet();
User user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
try {
//解决问题:一个附件或图片被一篇内部文档和外部新闻同时引用时,外部新闻可能查看不到附件或图片。 update by fanggsh fot TD5478 begin
//调整为如下:
//默认需要用户登录信息,不需要登录信息的情形如下:
//1、非登录用户查看外部新闻
//boolean needUser= false;
boolean needUser = true ;
int docId = 0 ;
String docIdsForOuterNews = "" ;
//String strSql="select id from DocDetail where exists (select 1 from docimagefile where imagefileid="+fileid+" and docId=DocDetail.id) and ishistory <> 1 and (docPublishType='2' or docPublishType='3')";
String strSql = "SELECT t1.id FROM DocDetail t1 INNER JOIN docimagefile t2 ON t1.id = t2.docId " +
"WHERE t2.imagefileid = ? AND t1.ishistory <> 1 AND ( t1.docPublishType = '2' OR t1.docPublishType = '3')" ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( strSql , fileid ) ;
while ( rs . next ( ) ) {
docId = rs . getInt ( "id" ) ;
if ( docId > 0 ) {
docIdsForOuterNews + = "," + docId ;
}
}
if ( ! docIdsForOuterNews . equals ( "" ) ) {
docIdsForOuterNews = docIdsForOuterNews . substring ( 1 ) ;
}
if ( ! docIdsForOuterNews . equals ( "" ) ) {
String newsClause = "" ;
String sqlDocExist = " select 1 from DocDetail where id in(" + docIdsForOuterNews + ") " ;
String sqlNewsClauseOr = "" ;
boolean hasOuterNews = false ;
rs . executeSql ( "select newsClause from DocFrontPage where publishType='0'" ) ;
while ( rs . next ( ) ) {
hasOuterNews = true ;
newsClause = Util . null2String ( rs . getString ( "newsClause" ) ) ;
if ( newsClause . equals ( "0" ) )
{
//newsClause=" 1=1 ";
needUser = false ;
break ;
}
if ( ! newsClause . trim ( ) . equals ( "" ) ) {
sqlNewsClauseOr + = " ^_^ (" + newsClause + ")" ;
}
}
ArrayList newsArr = new ArrayList ( ) ;
if ( ! sqlNewsClauseOr . equals ( "" ) & & needUser ) {
//sqlNewsClauseOr=sqlNewsClauseOr.substring(sqlNewsClauseOr.indexOf("("));
//sqlDocExist+=" and ("+sqlNewsClauseOr+") ";
String [ ] newsPage = Util . TokenizerString2 ( sqlNewsClauseOr , "^_^" ) ;
int i = 0 ;
String newsWhere = "" ;
for ( ; i < newsPage . length ; i + + ) {
if ( i % 10 = = 0 ) {
newsArr . add ( newsWhere ) ;
newsWhere = "" ;
newsWhere + = newsPage [ i ] ;
} else
newsWhere + = " or " + newsPage [ i ] ;
}
newsArr . add ( newsWhere ) ;
}
//System.out.print(sqlDocExist);
if ( hasOuterNews & & needUser ) {
for ( int j = 1 ; j < newsArr . size ( ) ; j + + ) {
String newsp = newsArr . get ( j ) . toString ( ) ;
if ( j = = 1 )
newsp = newsp . substring ( newsp . indexOf ( "or" ) + 2 ) ;
sqlDocExist + = "and(" + newsp + ")" ;
rs . executeSql ( sqlDocExist ) ;
sqlDocExist = " select 1 from DocDetail where id in(" + docIdsForOuterNews + ") " ;
if ( rs . next ( ) ) {
needUser = false ;
break ;
}
}
}
}
//处理外网查看默认图片
rs . executeSql ( "SELECT * FROM DocPicUpload WHERE Imagefileid=" + fileid ) ;
if ( rs . next ( ) ) {
needUser = false ;
}
if ( needUser ) {
boolean hasRight = false ;
try {
ResourceComInfo comInfo = new ResourceComInfo ( ) ;
String fromhrmcontract = Util . null2String ( req . getParameter ( "fromhrmcontract" ) ) ;
String f_weaver_belongto_userid = Util . null2String ( req . getParameter ( "f_weaver_belongto_userid" ) ) ; //需要增加的代码
String f_weaver_belongto_usertype = Util . null2String ( req . getParameter ( "f_weaver_belongto_usertype" ) ) ; //需要增加的代码
if ( fromMobile ) {
user = new User ( userid ) ;
} else {
user = HrmUserVarify . getUser ( req , res , f_weaver_belongto_userid , f_weaver_belongto_usertype ) ; //需要增加的代码
}
if ( user = = null ) {
user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
}
baseBean . writeLog ( "weaver-->1061-->fileid" + fileid + "--->user" + user + "=userid--" ) ;
if ( user = = null ) {
AuthService as = new AuthService ( ) ;
String sessionkey = "" ;
String querystring = req . getQueryString ( ) ;
String [ ] parameters = StringUtils . split ( querystring , '&' ) ;
if ( parameters ! = null ) {
for ( int i = 0 ; i < parameters . length ; i + + ) {
String [ ] param = StringUtils . split ( parameters [ i ] , '=' ) ;
if ( param ! = null & & param . length > = 2 & & "sessionkey" . equals ( param [ 0 ] ) ) {
sessionkey = param [ 1 ] ;
break ;
}
}
}
try {
user = as . getCurrUser ( sessionkey ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
if ( user = = null & & codeuserid > 0 ) {
user = new User ( codeuserid ) ;
}
baseBean . writeLog ( "weaver-->1084-->fileid" + fileid + "--->user" + user + "=userid--" ) ;
if ( user = = null ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp" ) ;
return ;
}
int hrmid = user . getUID ( ) ;
boolean ishr = ( HrmUserVarify . checkUserRight ( "HrmContractAdd:Add" , user ) ) ; //人力资源管理员
//应用中心-人事-员工关怀提醒-入职周年上传的图片( 没有HrmContractAdd:Add合同维护权限时根据这个放行)
boolean isOtherSettings = ( HrmUserVarify . checkUserRight ( "OtherSettings:Edit" , user ) ) ;
baseBean . writeLog ( "weaver-->1091-->fileid" + fileid + "--->fromhrmcontract" + fromhrmcontract ) ;
baseBean . writeLog ( "weaver-->1091-->fileid" + fileid + "--->ishr" + ishr ) ;
baseBean . writeLog ( "weaver-->1091-->fileid" + fileid + "--->hrmid" + hrmid ) ;
if ( ! "" . equals ( fromhrmcontract ) ) {
String contractman = "" ;
String contractdocid = "" ;
String contSql = "select contractman,contractdocid from HrmContract where id =" + fromhrmcontract ;
rs . executeSql ( contSql ) ;
if ( rs . next ( ) ) {
contractman = rs . getString ( "contractman" ) ;
contractdocid = rs . getString ( "contractdocid" ) ;
}
contSql = "select * from DocImageFile where docid=" + contractdocid + " and imagefileid=" + fileid ;
rs . executeSql ( contSql ) ;
if ( rs . next ( ) ) {
boolean ism = comInfo . isManager ( hrmid , contractman ) ; //上级
boolean ishe = ( hrmid = = Util . getIntValue ( contractman ) ) ; //本人
if ( ism | | ishe | | ishr ) hasRight = true ;
}
} else {
if ( isOtherSettings | | ishr | | hrmid = = 1 ) {
hasRight = true ;
} else {
hasRight = getWhetherHasRight ( "" + fileid , req , res , requestid , fromMobile , jsonParams ) ;
}
}
} catch ( Exception ex ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( ex ) ;
hasRight = false ;
}
baseBean . writeLog ( "weaver-->1125-->fileid" + fileid + "--->hasRight" + hasRight ) ;
if ( ! hasRight ) {
boolean isOdocSmartRegist = odocSmartRegist ( fileid ) ;
if ( isOdocSmartRegist ) {
hasRight = true ;
}
baseBean . writeLog ( "weaver-->1125-->fileid" + fileid + "--->hasRight" + hasRight + "odocSmartRegist(fileid)=" + isOdocSmartRegist ) ;
}
if ( ! hasRight & & isMobileDown & & "1" . equals ( Util . null2String ( baseBean . getPropValue ( "doc_mobile_detail_prop" , "doc_acc_isDownloadByProp" ) , "0" ) ) ) {
String isProhibitDownload = "0" ;
rs . executeQuery ( "select dataValue from ECOLOGY_MESSAGE_VALVE_CONFIG where type='prohibitDownload' and dataKey ='prohibitDownloadSwatch'" ) ;
if ( rs . next ( ) ) {
isProhibitDownload = Util . null2String ( rs . getString ( 1 ) , "0" ) ;
}
if ( ! "1" . equals ( isProhibitDownload ) ) {
hasRight = true ;
}
}
if ( ! hasRight ) { //
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v5" ) ;
return ;
}
//end by cyril on 2008-08-01 for td:9133
}
//解决问题:一个附件或图片被一篇内部文档和外部新闻同时引用时,外部新闻可能查看不到附件或图片。 update by fanggsh fot TD5478 end
//statement.close();
String download = Util . null2String ( req . getParameter ( "download" ) ) ;
String contenttype = "" ;
String filename = "" ;
String filerealpath = "" ;
String signInfo = "" ;
String hashInfo = "" ;
String iszip = "" ;
String isencrypt = "" ;
String isaesencrypt = "" ;
String aescode = "" ;
String tokenKey = "" ;
String storageStatus = "" ;
String comefrom = "" ;
String filesize = "" ;
String pdfimagefileid = "" ;
String downloadpdfimagefileid = "" ;
if ( "1" . equals ( req . getParameter ( "countdownloads" ) ) ) {
isCountDownloads = true ;
}
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
//String sql = "select imagefilename,filerealpath,iszip,isencrypt,imagefiletype , imagefile from ImageFile where imagefileid = " + fileid;
String sql = "select t1.imagefilename,t1.filerealpath,t1.signinfo,t1.hashinfo,t1.iszip,t1.isencrypt,t1.imagefiletype , t1.imagefileid, t1.imagefile,t1.isaesencrypt,t1.aescode,t2.imagefilename as realname,t1.TokenKey,t1.StorageStatus,t1.comefrom,t1.filesize from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + fileid ;
boolean isoracle = ( statement . getDBType ( ) ) . equals ( "oracle" ) ;
String extName = "" ;
statement . execute ( sql ) ;
//statement.executeQuery();
if ( statement . next ( ) ) {
filename = Util . null2String ( statement . getString ( "realname" ) ) ;
if ( filename . equals ( "" ) ) {
filename = Util . null2String ( statement . getString ( "imagefilename" ) ) ;
}
if ( filename . toLowerCase ( ) . endsWith ( ".pdf" ) ) {
int decryptPdfImageFileId = 0 ;
rs . executeSql ( "select decryptPdfImageFileId from workflow_texttopdf where pdfImageFileId=" + fileid ) ;
if ( rs . next ( ) ) {
decryptPdfImageFileId = Util . getIntValue ( rs . getString ( "decryptPdfImageFileId" ) , - 1 ) ;
}
if ( decryptPdfImageFileId > 0 ) {
sql = "select t1.imagefilename,t1.filerealpath,t1.signinfo,t1.hashinfo,t1.iszip,t1.isencrypt,t1.imagefiletype , t1.imagefileid, t1.imagefile,t1.isaesencrypt,t1.aescode,t2.imagefilename as realname,t1.TokenKey,t1.StorageStatus,t1.comefrom,t1.filesize from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + decryptPdfImageFileId ;
statement . execute ( sql ) ;
if ( ! statement . next ( ) ) {
return ;
}
}
}
filerealpath = Util . null2String ( statement . getString ( "filerealpath" ) ) ;
iszip = Util . null2String ( statement . getString ( "iszip" ) ) ;
signInfo = Util . null2String ( statement . getString ( "signinfo" ) ) ;
hashInfo = Util . null2String ( statement . getString ( "hashinfo" ) ) ;
isencrypt = Util . null2String ( statement . getString ( "isencrypt" ) ) ;
isaesencrypt = Util . null2o ( statement . getString ( "isaesencrypt" ) ) ;
aescode = Util . null2String ( statement . getString ( "aescode" ) ) ;
tokenKey = Util . null2String ( statement . getString ( "TokenKey" ) ) ;
storageStatus = Util . null2String ( statement . getString ( "StorageStatus" ) ) ;
comefrom = Util . null2String ( statement . getString ( "comefrom" ) ) ;
filesize = Util . null2String ( statement . getString ( "filesize" ) ) ;
if ( ! "DocLogAction_DocLogFile" . equals ( comefrom ) & & FiledownloadUtil . isdownloadpdf ( filename ) & & download . equals ( "1" ) ) {
pdfimagefileid = FiledownloadUtil . getpdfidByOfficeid ( fileid + "" ) ;
if ( pdfimagefileid . isEmpty ( ) ) {
pdfimagefileid = fileid + "" ;
}
String pdffileinfosql = "select imagefilename,filerealpath,aescode,iszip,isencrypt,isaesencrypt,TokenKey,StorageStatus,filesize,comefrom,hashinfo,signinfo from imagefile where imagefileid = ? " ;
RecordSet pdffileinfors = new RecordSet ( ) ;
pdffileinfors . executeQuery ( pdffileinfosql , pdfimagefileid ) ;
if ( pdffileinfors . next ( ) ) {
filename = Util . null2String ( pdffileinfors . getString ( "imagefilename" ) ) ;
filerealpath = Util . null2String ( pdffileinfors . getString ( "filerealpath" ) ) ;
iszip = Util . null2String ( pdffileinfors . getString ( "iszip" ) ) ;
signInfo = Util . null2String ( pdffileinfors . getString ( "signinfo" ) ) ;
hashInfo = Util . null2String ( pdffileinfors . getString ( "hashinfo" ) ) ;
isencrypt = Util . null2String ( pdffileinfors . getString ( "isencrypt" ) ) ;
isaesencrypt = Util . null2String ( pdffileinfors . getString ( "isaesencrypt" ) ) ;
aescode = Util . null2String ( pdffileinfors . getString ( "aescode" ) ) ;
tokenKey = Util . null2String ( pdffileinfors . getString ( "TokenKey" ) ) ;
storageStatus = Util . null2String ( pdffileinfors . getString ( "StorageStatus" ) ) ;
comefrom = Util . null2String ( pdffileinfors . getString ( "comefrom" ) ) ;
filesize = Util . null2String ( pdffileinfors . getString ( "filesize" ) ) ;
}
} else {
pdfimagefileid = fileid + "" ;
}
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
if ( ImageConvertUtil . canConvertPdfForDownload ( extName , fileid + "" ) & & ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
RecordSet rsrecord = new RecordSet ( ) ;
PdfConvertUtil pdfConvertUtil = new PdfConvertUtil ( ) ;
int pdfid = pdfConvertUtil . convertPdf ( fileid ) ;
if ( pdfid > 0 ) {
downloadpdfimagefileid = String . valueOf ( pdfid ) ;
String pdffileinfosql = "select imagefilename,filerealpath from imagefile where imagefileid = ? " ;
RecordSet pdffileinfors = new RecordSet ( ) ;
pdffileinfors . executeQuery ( pdffileinfosql , downloadpdfimagefileid ) ;
if ( pdffileinfors . next ( ) ) {
filename = filename . substring ( 0 , filename . lastIndexOf ( "." ) ) + ".pdf" ;
filerealpath = Util . null2String ( pdffileinfors . getString ( "filerealpath" ) ) ;
}
}
}
if ( downloadpdfimagefileid . isEmpty ( ) ) {
downloadpdfimagefileid = fileid + "" ;
}
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
boolean isInline = false ;
String cacheContorl = "" ;
boolean isEnableForDsp = false ;
boolean canUseAliOSS = false ;
if ( ! tokenKey . equals ( "" ) & & storageStatus . equals ( "1" ) & & AliOSSObjectManager . isEnableForDsp ( req ) ) {
isEnableForDsp = true ;
}
if ( ! tokenKey . equals ( "" ) & & storageStatus . equals ( "1" ) & & AliOSSObjectManager . canUseAliOSS ( ) ) {
canUseAliOSS = true ;
}
boolean isPic = false ;
String lowerfilename = filename ! = null ? filename . toLowerCase ( ) : "" ;
boolean ishtmlfile = false ;
boolean needGbkCode = false ;
if ( lowerfilename . endsWith ( ".html" ) | | lowerfilename . endsWith ( ".htm" ) ) {
RecordSet rs_tmp = new RecordSet ( ) ;
String _sql = "select i.imagefilename from DocPreviewHtml a,imagefile i "
+ "where a.imagefileid=i.imagefileid and a.htmlfileid = ?" ;
if ( "email" . equals ( req . getParameter ( "model" ) ) ) {
_sql = "select filename as imagefilename from mailresourcefile where htmlcode=?" ;
}
rs_tmp . executeQuery ( _sql , fileid ) ;
if ( rs_tmp . next ( ) ) {
ishtmlfile = true ;
String _imagefilename = Util . null2String ( rs_tmp . getString ( "imagefilename" ) ) ;
needGbkCode = _imagefilename . toLowerCase ( ) . endsWith ( ".xls" )
| | _imagefilename . toLowerCase ( ) . endsWith ( ".xlsx" )
| | _imagefilename . toLowerCase ( ) . endsWith ( ".doc" ) ;
}
String worflowhtmlSql = " select comefrom from imagefile where imagefileid = ?" ;
rs_tmp . executeQuery ( worflowhtmlSql , fileid ) ;
if ( rs_tmp . next ( ) ) {
String htmlcomefrom = Util . null2String ( rs_tmp . getString ( "comefrom" ) ) ;
if ( "WorkflowToDoc" . equals ( htmlcomefrom ) ) {
ishtmlfile = true ;
}
}
}
filename = StringEscapeUtils . unescapeHtml ( filename ) ;
String extendName = lowerfilename . lastIndexOf ( "." ) ! = - 1 ? lowerfilename . substring ( lowerfilename . lastIndexOf ( "." ) + 1 ) : lowerfilename ;
boolean inlineView = inlineViewFile ( extendName ) ;
if ( download . equals ( "" ) & & ( inlineView
| | ishtmlfile ) ) {
if ( filename . toLowerCase ( ) . endsWith ( ".doc" ) ) contenttype = "application/msword" ;
else if ( filename . toLowerCase ( ) . endsWith ( ".xls" ) ) contenttype = "application/vnd.ms-excel" ;
else if ( filename . toLowerCase ( ) . endsWith ( ".gif" ) ) {
contenttype = "image/gif" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".png" ) ) {
contenttype = "image/png" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".jpg" ) | | filename . toLowerCase ( ) . endsWith ( ".jpeg" ) ) {
contenttype = "image/jpg" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".bmp" ) ) {
contenttype = "image/bmp" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".svg" ) ) {
contenttype = "image/svg+xml" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
}
else if ( filename . toLowerCase ( ) . endsWith ( ".txt" ) ) contenttype = "text/plain" ;
else if ( filename . toLowerCase ( ) . endsWith ( ".pdf" ) ) contenttype = "application/pdf" ;
else if ( filename . toLowerCase ( ) . endsWith ( ".html" ) | | filename . toLowerCase ( ) . endsWith ( ".htm" ) ) contenttype = "text/html" ;
else {
contenttype = statement . getString ( "imagefiletype" ) ;
}
try {
String _ec_browser = Util . null2String ( req . getParameter ( "_ec_browser" ) ) ;
String _ec_os = Util . null2String ( req . getParameter ( "_ec_os" ) ) ;
if ( "Wechat" . equals ( _ec_browser ) & & "iOS" . equals ( _ec_os ) ) { //微信
res . setHeader ( "content-disposition" , "inline; filename=\"" + new String ( filename . getBytes ( "UTF-8" ) , "ISO8859-1" ) + "\"" ) ;
} else if ( _ec_ismobile | | from_doc_mobile | | agent . toLowerCase ( ) . contains ( "emobile" ) | | agent . toLowerCase ( ) . contains ( "android" ) | | agent . toLowerCase ( ) . contains ( "iphone" ) ) {
// res.setHeader("content-disposition", "inline; filename=\"" + URLEncoder.encode(filename.replaceAll("<", "").replaceAll(">", "").replaceAll("<", "").replaceAll(">", ""),"UTF-8").replaceAll("\\+", "%20").replaceAll("%28", "(").replaceAll("%29", ")")+"\"");
filename = new String ( filename . getBytes ( "UTF-8" ) , "ISO-8859-1" ) ;
res . setHeader ( "Content-disposition" , "inline;filename=\"" + filename + "\"" ) ;
} else {
if ( ( agent . contains ( "Firefox" ) | | agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
res . setHeader ( "content-disposition" , "inline; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "inline; filename=\"" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
}
} catch ( Exception ecode ) {
writeLogs ( ecode ) ;
}
isInline = true ;
} else {
contenttype = "application/octet-stream" ;
if ( filename . toLowerCase ( ) . endsWith ( ".mp4" ) | | filename . toLowerCase ( ) . endsWith ( ".mov" ) ) {
contenttype = "video/mp4" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".ogg" ) ) {
contenttype = "video/ogg" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".asf" ) ) {
contenttype = "video/x-ms-asf" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".mp3" ) ) {
contenttype = "audio/mp3" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".wav" ) ) {
contenttype = "audio/wav" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".wma" ) ) {
contenttype = "audio/x-ms-wma" ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".au" ) ) {
contenttype = "audio/basic" ;
}
if ( filename . toLowerCase ( ) . endsWith ( ".pdf" ) ) contenttype = "application/pdf" ;
try {
// res.setHeader("Content-length", "" + filesize);
// res.setHeader("Content-Range", "bytes");
// res.addHeader("Cache-Control", "no-cache");
//System.out.println(new String(new String(filename.getBytes(clientEcoding), "ISO8859_1").getBytes("ISO8859_1"),"utf-8"));
//System.out.println(new String(filename.getBytes(clientEcoding)));
String _ec_browser = Util . null2String ( req . getParameter ( "_ec_browser" ) ) ;
String _ec_os = Util . null2String ( req . getParameter ( "_ec_os" ) ) ;
if ( "Wechat" . equals ( _ec_browser ) & & ( "iOS" . equals ( _ec_os ) | | "Mac OS" . equals ( _ec_os ) ) ) { //微信
res . setHeader ( "content-disposition" , "inline; filename=\"" + new String ( filename . getBytes ( "UTF-8" ) , "ISO8859-1" ) + "\"" ) ;
} else if ( agent . contains ( "Wechat" ) & & ( agent . contains ( "iOS" ) | | agent . contains ( "Mac OS" ) ) ) {
filename = new String ( filename . getBytes ( "UTF-8" ) , "ISO-8859-1" ) ;
res . setHeader ( "Content-disposition" , "attachment;filename=\"" + filename + "\"" ) ;
} else if ( agent . contains ( "Mac OS" ) & & ! AliOSSObjectManager . isEnable ( ) ) {
filename = new String ( filename . getBytes ( "UTF-8" ) , "ISO-8859-1" ) ;
res . setHeader ( "Content-disposition" , "attachment;filename=\"" + filename + "\"" ) ;
} else if ( _ec_ismobile | | from_doc_mobile | | agent . toLowerCase ( ) . contains ( "android" ) ) {
if ( FiledownloadUtil . isIos ( req ) ) {
filename = FiledownloadUtil . counthanzi ( filename , extName ) ;
}
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "%" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
} else {
if ( ( agent . contains ( " Chrome" ) ) & & ! agent . contains ( "Edge" ) ) {
// res.setHeader("content-disposition", "attachment;");
res . setHeader ( "content-disposition" , "attachment;filename=" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" )
. replaceAll ( "%29" , ")" ) . replaceAll ( "%7B" , "{" ) . replaceAll ( "%7D" , "}" ) . replaceAll ( "%5B" , "[" ) . replaceAll ( "%5D" , "]" ) . replaceAll ( "%40" , "@" ) . replaceAll ( "%23" , "#" ) . replaceAll ( "%25" , "%" ) . replaceAll ( "%26" , "&" )
. replaceAll ( "%2B" , "+" ) . replaceAll ( "%27" , "'" ) . replaceAll ( "%20" , " " ) ) ;
// res.setHeader("content-disposition", "attachment; filename*=UTF-8''" + URLEncoder.encode(filename.replaceAll("<", "").replaceAll(">", "").replaceAll("<", "").replaceAll(">", ""), "UTF-8").replaceAll("\\+", "%20").replaceAll("%28", "(").replaceAll("%29", ")"));
// res.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(filename, "UTF-8"));
// res.setContentType("application/vnd.ms-excel;charset=utf-8");
// res.setCharacterEncoding("UTF-8");
} else if ( agent . contains ( "Safari" ) ) {
filename = new String ( filename . getBytes ( "UTF-8" ) , "ISO-8859-1" ) ;
res . setHeader ( "Content-disposition" , "attachment;filename=\"" + filename + "\"" ) ;
} else if ( agent . contains ( "Firefox" ) ) {
// filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
// res.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
// filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
// res.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
// filename = "=?UTF-8?B?" + (new String(Base64.encodeBase64(filename.getBytes("UTF-8")))) + "?=";
// res.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", filename));
res . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
}
} catch ( Exception ecode ) {
writeLogs ( ecode ) ;
}
}
String iscompress = Util . null2String ( req . getParameter ( "iscompress" ) ) ;
String thumbnail = Util . null2String ( req . getParameter ( "thumbnail" ) ) ;
String targetFilePath = "" ;
if ( isEnableForDsp | | canUseAliOSS ) {
//解决安卓app预览黑屏的问题
boolean isAndroid = agent . contains ( "Android" ) & & agent . startsWith ( "E-Mobile7" ) ;
if ( isAndroid & & download . equals ( "1" ) ) {
if ( filename . toLowerCase ( ) . endsWith ( ".gif" ) ) {
contenttype = "image/gif" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".png" ) ) {
contenttype = "image/png" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".jpg" ) | | filename . toLowerCase ( ) . endsWith ( ".jpeg" ) ) {
contenttype = "image/jpg" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".bmp" ) ) {
contenttype = "image/bmp" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".svg" ) ) {
contenttype = "image/svg+xml" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
isPic = true ;
}
}
boolean isAliOSSToServer = AliOSSObjectManager . isAliOSSToServer ( comefrom ) ;
boolean isOpenWaterMark = WaterMarkUtil . isOpenWmSetting ( ) ;
boolean isSafari = agent . contains ( "Mac OS" ) ;
int imgDownByObs = Util . getIntValue ( baseBean . getPropValue ( "FileDownload" , "imgDownByObs" ) , 1 ) ;
baseBean . writeLog ( "FileDownload---------1645---fileid=" + fileid + ";isPic=" + isPic + ";filename=" + filename + ";isAliOSSToServer=" + isAliOSSToServer + ";imgDownByObs=" + imgDownByObs + ";frompdfview=" + frompdfview + ";isOpenWaterMark=" + isOpenWaterMark + ";ishtmlfile=" + ishtmlfile + ";canUseAliOSS=" + canUseAliOSS + ";isEnableForDsp=" + isEnableForDsp + ";isSafari=" + isSafari ) ;
//canUseAliOSS && !isEnableForDs :判断是否开启了阿里云并且请求端是内网地址的情况下走此逻辑
if ( isAliOSSToServer | | ( isPic & & imgDownByObs ! = 1 ) | | ! frompdfview . isEmpty ( ) | | isOpenWaterMark | | ishtmlfile | | ( canUseAliOSS & & ! isEnableForDsp ) | | isSafari ) {
baseBean . writeLog ( "FileDownload---------1648---fileid=" + fileid + ";isPic=" + isPic + ";11111" ) ;
InputStream imagefile = null ;
ServletOutputStream out = null ;
DocAddWaterForSecond docAddWaterForSecond = new DocAddWaterForSecond ( ) ;
try {
imagefile = weaver . alioss . AliOSSObjectUtil . downloadFile ( tokenKey ) ;
if ( "1" . equals ( iscompress ) ) {
ImageCompressUtil imageCompressUtil = new ImageCompressUtil ( ) ;
targetFilePath = imageCompressUtil . getTargetFilePath ( ) ;
imagefile = imageCompressUtil . imageCompress ( imagefile , targetFilePath ) ;
}
out = res . getOutputStream ( ) ;
if ( ishtmlfile & & needGbkCode ) {
boolean loadGBK = ! "0" . equals ( rs . getPropValue ( "docpreview" , "loadGBK" ) ) ;
if ( loadGBK ) {
res . setContentType ( contenttype + ";charset=GBK" ) ;
}
} else {
res . setContentType ( contenttype ) ;
}
// extName = filename.contains(".")? filename.substring(filename.lastIndexOf(".") + 1) : "";
if ( ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
Map < String , Object > secWmSetMap = WaterMarkUtilNew . getCategoryWmSet ( fileid + "" ) ;
//writeLogs("1786 fileid=" + fileid);
shouldAddFileDownLoadWm ( secWmSetMap , fileid + "" , Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2447956 wgs
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtilNew . SECCATEGORYDOWNLOAD ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtilNew . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtilNew . WATERCONTENTISNULL ) ) ) {
// imagefile = WaterMarkUtil.takefileWater(imagefile,user,filename,fileid,extName,WaterMarkUtil.MOULDDOC);
imagefile = FileWaterManager . takewater ( req , downloadpdfimagefileid , filename , extName , imagefile , WaterMarkUtil . MOULDDOC , fileid ) ;
}
}
long filetotalsize = 0 ;
String _ec_browser = Util . null2String ( req . getParameter ( "_ec_browser" ) ) ;
boolean isWeChat = false ;
if ( agent . contains ( "Wechat" ) | | agent . contains ( "Android" ) | | "Wechat" . equalsIgnoreCase ( _ec_browser ) ) {
isWeChat = true ;
}
baseBean . writeLog ( "FileDownload---------1496---fileid=" + fileid + ";isWeChat=" + isWeChat + ";_ec_browser=" + _ec_browser + ";agent=" + agent ) ;
String sourceFilePath = "" ;
if ( isWeChat ) {
SystemComInfo syscominfo = new SystemComInfo ( ) ;
String syspath = Util . null2String ( syscominfo . getFilesystem ( ) ) ;
String rootPath = Util . null2String ( GCONST . getRootPath ( ) ) ;
if ( "" . equals ( syspath ) ) {
sourceFilePath = rootPath + "doctempfile" ;
} else {
if ( syspath . endsWith ( File . separator ) ) {
sourceFilePath = syspath + "doctempfile" ;
} else {
sourceFilePath = syspath + File . separator + "doctempfile" ;
}
}
File sfile = new File ( sourceFilePath ) ;
if ( ! sfile . exists ( ) ) sfile . mkdirs ( ) ;
sourceFilePath + = File . separator + UUID . randomUUID ( ) . toString ( ) ;
OutputStream os = null ;
int read ;
byte [ ] buf = new byte [ 8 * 1024 ] ;
try {
os = new FileOutputStream ( sourceFilePath ) ;
while ( ( read = imagefile . read ( buf ) ) ! = - 1 ) {
os . write ( buf , 0 , read ) ;
filetotalsize + = read ;
}
} catch ( Exception e ) {
} finally {
if ( os ! = null )
os . close ( ) ;
}
imagefile = new FileInputStream ( sourceFilePath ) ;
res . setHeader ( "Content-length" , "" + filetotalsize ) ;
}
if ( "1" . equals ( download ) ) {
imagefile = FileManager . download ( req , fileid + "" , filerealpath , aescode , iszip , isaesencrypt , imagefile ) ;
}
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
try {
if ( ! "" . equals ( sourceFilePath ) ) {
File f = new File ( sourceFilePath ) ;
if ( f . exists ( ) & & f . isFile ( ) ) {
FileSecurityUtil . deleteFile ( f ) ;
}
}
} catch ( Exception e ) {
baseBean . writeLog ( "FileDownload---------1533---fileid=" + fileid + ";Exception=" + e ) ;
}
}
catch ( Exception e ) {
writeLogs ( e ) ;
//do nothing
}
finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( out ! = null ) out . flush ( ) ;
if ( out ! = null ) out . close ( ) ;
if ( "1" . equals ( iscompress ) & & StringUtils . isNotEmpty ( targetFilePath ) ) {
File targetfile = new File ( targetFilePath ) ;
if ( targetfile . exists ( ) ) {
FileSecurityUtil . deleteFile ( targetfile ) ;
//new FileDeleteUtil().deleteFile(targetfile);
}
}
}
try {
if ( needUser & & nolog = = 0 ) {
//记录下载日志 begin
HttpSession session = req . getSession ( false ) ;
if ( session ! = null ) {
user = ( User ) session . getAttribute ( "weaver_user@bean" ) ;
if ( user ! = null ) {
//董平修改 文档下载日志只记录了内部员工的名字, 如果是客户门户来下载, 则没有记录 for TD:1644
String userType = user . getLogintype ( ) ;
if ( "1" . equals ( userType ) ) { //如果是内部用户 名称就是 lastName 外部则入在 firstName里面
downloadLog ( user . getUID ( ) , user . getLastname ( ) , fileid , filename , ipstring ) ;
} else {
downloadLog ( user . getUID ( ) , user . getFirstname ( ) , fileid , filename , ipstring ) ;
}
}
}
//记录下载日志 end
}
countDownloads ( "" + fileid ) ;
} catch ( Exception ex ) {
writeLogs ( ex ) ;
}
return ;
} else {
baseBean . writeLog ( "FileDownload---------1767---fileid=" + fileid + ";isPic=" + isPic + ";222222" ) ;
String urlString = weaver . alioss . AliOSSObjectUtil . generatePresignedUrl ( tokenKey , filename , contenttype , isInline , cacheContorl , isSafari ) ;
if ( urlString ! = null ) {
try {
if ( needUser & & nolog = = 0 ) {
//记录下载日志 begin
HttpSession session = req . getSession ( false ) ;
if ( session ! = null ) {
user = ( User ) session . getAttribute ( "weaver_user@bean" ) ;
if ( user ! = null ) {
//董平修改 文档下载日志只记录了内部员工的名字, 如果是客户门户来下载, 则没有记录 for TD:1644
String userType = user . getLogintype ( ) ;
if ( "1" . equals ( userType ) ) { //如果是内部用户 名称就是 lastName 外部则入在 firstName里面
downloadLog ( user . getUID ( ) , user . getLastname ( ) , fileid , filename , ipstring ) ;
} else {
downloadLog ( user . getUID ( ) , user . getFirstname ( ) , fileid , filename , ipstring ) ;
}
}
}
//记录下载日志 end
}
countDownloads ( "" + fileid ) ;
} catch ( Exception ex ) {
writeLogs ( ex ) ;
}
//urlString=urlString+"&fileid="+fileid;
res . sendRedirect ( urlString ) ;
return ;
}
}
}
InputStream imagefile = null ;
ZipInputStream zin = null ;
/ * if ( filerealpath . equals ( "" ) ) { // 旧的文件放在数据库中的方式
if ( isoracle )
imagefile = new BufferedInputStream ( statement . getBlobBinary ( "imagefile" ) ) ;
else
imagefile = new BufferedInputStream ( statement . getBinaryStream ( "imagefile" ) ) ;
} else * / //目前已经不可能将文件存放在数据库中了
File thefile = new File ( filerealpath ) ;
boolean signResult = false ;
if ( ! filerealpath . isEmpty ( ) & & ! signInfo . isEmpty ( ) & & ! hashInfo . isEmpty ( ) ) {
signResult = com . api . doc . util . DocEncryptUtil . verifyFile ( hashInfo , signInfo , filerealpath ) ;
// 如果签名不通过,则跳转提醒页面
if ( ! signResult ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/integrityFailure.jsp?line=4&user=null" ) ;
return ;
}
}
if ( iszip . equals ( "1" ) ) {
zin = new ZipInputStream ( new FileInputStream ( thefile ) ) ;
if ( zin . getNextEntry ( ) ! = null ) imagefile = new BufferedInputStream ( zin ) ;
} else {
imagefile = new BufferedInputStream ( new FileInputStream ( thefile ) ) ;
}
if ( isaesencrypt . equals ( "1" ) ) {
imagefile = AESCoder . decrypt ( imagefile , aescode ) ;
}
if ( signResult ) {
imagefile = com . api . doc . util . DocEncryptUtil . decryptInput ( imagefile ) ;
if ( imagefile = = null ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/integrityFailure.jsp?line=4&user=null" ) ;
return ;
}
}
if ( download . equals ( "1" ) & & ( 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 ) {
writeLogs ( e ) ;
if ( bout ! = null ) bout . close ( ) ;
}
}
ServletOutputStream out = null ;
DocAddWaterForSecond docAddWaterForSecond = new DocAddWaterForSecond ( ) ;
try {
out = res . getOutputStream ( ) ;
res . setContentType ( contenttype ) ;
if ( ishtmlfile & & needGbkCode ) {
boolean loadGBK = ! "0" . equals ( rs . getPropValue ( "docpreview" , "loadGBK" ) ) ;
if ( loadGBK ) {
res . setContentType ( contenttype + ";charset=GBK" ) ;
}
}
if ( "1" . equals ( iscompress ) ) {
ImageCompressUtil imageCompressUtil = new ImageCompressUtil ( ) ;
targetFilePath = imageCompressUtil . getTargetFilePath ( ) ;
imagefile = imageCompressUtil . imageCompress ( imagefile , targetFilePath ) ;
} else if ( "1" . equals ( thumbnail ) ) {
imagefile = getThumbnail ( fileid , imagefile ) ;
}
if ( ! frompdfview . equals ( "1" ) & & download . equals ( "1" ) ) {
Map < String , Object > secWmSetMap = WaterMarkUtil . getCategoryWmSet ( fileid + "" ) ;
//writeLogs("2013 fileid=" + fileid);
shouldAddFileDownLoadWm ( secWmSetMap , fileid + "" , Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2447956 wgs
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYDOWNLOAD ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtil . WATERCONTENTISNULL ) ) ) {
// imagefile = WaterMarkUtil.takefileWater(imagefile,user,filename,fileid,extName,WaterMarkUtil.MOULDDOC);
imagefile = FileWaterManager . takewater ( req , downloadpdfimagefileid , filename , extName , imagefile , WaterMarkUtil . MOULDDOC , fileid ) ;
}
}
// 2298348 wgs
//writeLogs("2021 downloadFlag=" + downloadFlag);
if ( ! "1" . equals ( Util . null2String ( req . getParameter ( "download" ) ) ) ) {
imagefile = EncryptDecryptFileUtil . fileDecrypt ( Util . getIntValue ( fileid ) , imagefile , filename , "" ) ;
}
// 2298348 wgs
if ( "1" . equals ( download ) ) {
imagefile = FileManager . download ( req , fileid + "" , filerealpath , aescode , iszip , isaesencrypt , imagefile ) ;
}
//加密流程返回false
if ( ( ( contenttype . contains ( "video" ) & & agent . contains ( "iPhone" ) ) | | contenttype . contains ( "audio" ) ) & & ! download . equals ( "1" ) ) { //ios播放视频文件, 解析range字段
sendVideoToIOS ( req , res , imagefile , filename , filerealpath ) ;
} else {
long filetotalsize = 0 ;
String _ec_browser = Util . null2String ( req . getParameter ( "_ec_browser" ) ) ;
boolean isWeChat = false ;
if ( agent . contains ( "Wechat" ) | | agent . contains ( "Android" ) | | "Wechat" . equalsIgnoreCase ( _ec_browser ) ) {
isWeChat = true ;
}
baseBean . writeLog ( "FileDownload---------1675---fileid=" + fileid + ";isWeChat=" + isWeChat + ";_ec_browser=" + _ec_browser + ";agent=" + agent ) ;
String sourceFilePath = "" ;
if ( isWeChat ) {
SystemComInfo syscominfo = new SystemComInfo ( ) ;
String syspath = Util . null2String ( syscominfo . getFilesystem ( ) ) ;
String rootPath = Util . null2String ( GCONST . getRootPath ( ) ) ;
if ( "" . equals ( syspath ) ) {
sourceFilePath = rootPath + "doctempfile" ;
} else {
if ( syspath . endsWith ( File . separator ) ) {
sourceFilePath = syspath + "doctempfile" ;
} else {
sourceFilePath = syspath + File . separator + "doctempfile" ;
}
}
File sfile = new File ( sourceFilePath ) ;
if ( ! sfile . exists ( ) ) sfile . mkdirs ( ) ;
sourceFilePath + = File . separator + UUID . randomUUID ( ) . toString ( ) ;
OutputStream os = null ;
int read ;
byte [ ] buf = new byte [ 8 * 1024 ] ;
try {
os = new FileOutputStream ( sourceFilePath ) ;
while ( ( read = imagefile . read ( buf ) ) ! = - 1 ) {
os . write ( buf , 0 , read ) ;
filetotalsize + = read ;
}
} catch ( Exception e ) {
} finally {
if ( os ! = null )
os . close ( ) ;
}
imagefile = new FileInputStream ( sourceFilePath ) ;
res . setHeader ( "Content-length" , "" + filetotalsize ) ;
}
// 文档/流程中单个附件下载
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
try {
if ( ! "" . equals ( sourceFilePath ) ) {
File f = new File ( sourceFilePath ) ;
if ( f . exists ( ) & & f . isFile ( ) ) {
FileSecurityUtil . deleteFile ( f ) ;
}
}
} catch ( Exception e ) {
baseBean . writeLog ( "FileDownload---------1707---fileid=" + fileid + ";Exception=" + e ) ;
}
}
}
catch ( Exception e ) {
writeLogs ( e ) ;
//do nothing
}
finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( zin ! = null ) zin . close ( ) ;
if ( out ! = null ) out . flush ( ) ;
if ( out ! = null ) out . close ( ) ;
if ( "1" . equals ( iscompress ) & & StringUtils . isNotEmpty ( targetFilePath ) ) {
File targetfile = new File ( targetFilePath ) ;
FileSecurityUtil . deleteFile ( targetfile ) ;
//new FileDeleteUtil().deleteFile(targetFilePath);
}
}
if ( needUser & & nolog = = 0 ) {
//记录下载日志 begin
HttpSession session = req . getSession ( false ) ;
if ( session ! = null ) {
user = ( User ) session . getAttribute ( "weaver_user@bean" ) ;
if ( user ! = null ) {
//董平修改 文档下载日志只记录了内部员工的名字, 如果是客户门户来下载, 则没有记录 for TD:1644
String userType = user . getLogintype ( ) ;
if ( "1" . equals ( userType ) ) { //如果是内部用户 名称就是 lastName 外部则入在 firstName里面
downloadLog ( user . getUID ( ) , user . getLastname ( ) , fileid , filename , ipstring ) ;
} else {
downloadLog ( user . getUID ( ) , user . getFirstname ( ) , fileid , filename , ipstring ) ;
}
}
}
//记录下载日志 end
}
countDownloads ( "" + fileid ) ;
}
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
} //错误处理
}
} else {
String urlstr = req . getParameter ( "urlstr" ) ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
boolean isNotUse = true ;
if ( isNotUse ) {
return ;
}
InputStream imagefile = null ;
URL url = new URL ( urlstr ) ;
HttpURLConnection conn = ( HttpURLConnection ) url . openConnection ( ) ;
conn . setRequestMethod ( "GET" ) ;
conn . setConnectTimeout ( 5 * 1000 ) ;
imagefile = conn . getInputStream ( ) ;
ServletOutputStream outputStream = res . getOutputStream ( ) ;
byte data [ ] = new byte [ 1024 ] ;
int byteread ;
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
outputStream . write ( data , 0 , byteread ) ;
outputStream . flush ( ) ;
}
outputStream . close ( ) ;
imagefile . close ( ) ;
}
}
/ * *
* 获 取 缩 略 图 的 流 对 象
* @param fileid
* @param is
* @return
* /
private InputStream getThumbnail ( int fileid , InputStream is ) {
RecordSet rs = new RecordSet ( ) ;
int width = Util . getIntValue ( rs . getPropValue ( "docthumbnailfile" , "width" ) , 300 ) ;
width = width < = 0 ? 0 : width ;
rs . executeQuery ( "select thumbnailid from ImageFileThumbnail where imgfileid=? and width=?" , fileid , width ) ;
if ( rs . next ( ) ) {
//System.out.println("id为: "+fileid+",走的缩略图");
return ImageFileManager . getInputStreamById ( Util . getIntValue ( rs . getString ( "thumbnailid" ) ) ) ;
}
ImageCompressUtil imageCompressUtil = new ImageCompressUtil ( ) ;
String targetFilePath = imageCompressUtil . getTargetFilePath ( ) ;
InputStream imagefile = imageCompressUtil . imageCompressPercent ( is , targetFilePath , width , 0.7f ) ;
ByteArrayOutputStream swapStream = new ByteArrayOutputStream ( ) ;
byte [ ] in2b = null ;
try {
byte [ ] buff = new byte [ 100 ] ;
int rc = 0 ;
while ( ( rc = imagefile . read ( buff , 0 , 100 ) ) > 0 ) {
swapStream . write ( buff , 0 , rc ) ;
}
in2b = swapStream . toByteArray ( ) ;
} catch ( Exception e ) {
} finally {
try {
swapStream . close ( ) ;
} catch ( Exception e ) { }
try {
if ( imagefile ! = null )
imagefile . close ( ) ;
} catch ( Exception e ) { }
}
ImageFileManager ifm = new ImageFileManager ( ) ;
ifm . setData ( in2b ) ;
ifm . setImagFileName ( UUID . randomUUID ( ) . toString ( ) + ".jpeg" ) ;
int thumbnailid = ifm . saveImageFile ( ) ;
if ( thumbnailid < = 0 ) {
return ImageFileManager . getInputStreamById ( fileid ) ;
}
rs . executeUpdate ( "insert into ImageFileThumbnail(imgfileid,thumbnailid,width) values(?,?,?)" , fileid , thumbnailid , width ) ;
return ImageFileManager . getInputStreamById ( thumbnailid ) ;
}
public void sendVideoToIOSJSP ( HttpServletRequest request , HttpServletResponse response , InputStream inputStream , String fileName , String filerealpath ) throws FileNotFoundException , IOException {
sendVideoToIOS ( request , response , inputStream , fileName , filerealpath ) ;
}
/ * *
* ios 传 输 视 频 , 必 须 要 解 析 range 字 段
* @param request
* @param response
* @param inputStream
* @param fileName
* @param filerealpath
* /
private void sendVideoToIOS ( HttpServletRequest request , HttpServletResponse response , InputStream inputStream , String fileName , String filerealpath ) throws FileNotFoundException , IOException {
if ( filerealpath . endsWith ( ".zip" ) ) {
filerealpath = filerealpath . substring ( 0 , filerealpath . length ( ) - 4 ) ;
}
File tempfile = new File ( filerealpath + "_tmp" ) ;
FileOutputStream fos = null ;
RandomAccessFile randomFile = null ;
ServletOutputStream out = null ;
try {
byte [ ] buffer = new byte [ 4096 ] ;
int byteread = 0 ;
fos = new FileOutputStream ( tempfile ) ;
while ( ( byteread = inputStream . read ( buffer ) ) ! = - 1 ) {
fos . write ( buffer , 0 , byteread ) ;
}
fos . flush ( ) ;
randomFile = new RandomAccessFile ( tempfile , "r" ) ; //只读模式
long contentLength = randomFile . length ( ) ;
String range = request . getHeader ( "Range" ) ;
int start = 0 , end = 0 ;
if ( range ! = null & & range . startsWith ( "bytes=" ) ) {
String [ ] values = range . split ( "=" ) [ 1 ] . split ( "-" ) ;
start = Integer . parseInt ( values [ 0 ] ) ;
if ( values . length > 1 ) {
end = Integer . parseInt ( values [ 1 ] ) ;
}
}
int requestSize = 0 ;
if ( end ! = 0 & & end > start ) {
requestSize = end - start + 1 ;
} else {
requestSize = Integer . MAX_VALUE ;
}
response . setHeader ( "Accept-Ranges" , "bytes" ) ;
response . setHeader ( "ETag" , fileName ) ;
response . setHeader ( "Last-Modified" , new Date ( ) . toString ( ) ) ;
//第一次请求只返回content length来让客户端请求多次实际数据
if ( range = = null ) {
response . setHeader ( "Content-length" , contentLength + "" ) ;
} else {
//以后的多次以断点续传的方式来返回视频数据
response . setStatus ( HttpServletResponse . SC_PARTIAL_CONTENT ) ; //206
long requestStart = 0 , requestEnd = 0 ;
String [ ] ranges = range . split ( "=" ) ;
if ( ranges . length > 1 ) {
String [ ] rangeDatas = ranges [ 1 ] . split ( "-" ) ;
requestStart = Integer . parseInt ( rangeDatas [ 0 ] ) ;
if ( rangeDatas . length > 1 ) {
requestEnd = Integer . parseInt ( rangeDatas [ 1 ] ) ;
}
}
long length = 0 ;
if ( requestEnd > 0 ) {
length = requestEnd - requestStart + 1 ;
response . setHeader ( "Content-length" , "" + length ) ;
response . setHeader ( "Content-Range" , "bytes " + requestStart + "-" + requestEnd + "/" + contentLength ) ;
} else {
length = contentLength - requestStart ;
response . setHeader ( "Content-length" , "" + length ) ;
response . setHeader ( "Content-Range" , "bytes " + requestStart + "-" + ( contentLength - 1 ) + "/" + contentLength ) ;
}
}
out = response . getOutputStream ( ) ;
int needSize = requestSize ;
randomFile . seek ( start ) ;
while ( needSize > 0 ) {
int len = randomFile . read ( buffer ) ;
if ( needSize < buffer . length ) {
out . write ( buffer , 0 , needSize ) ;
} else {
out . write ( buffer , 0 , len ) ;
if ( len < buffer . length ) {
break ;
}
}
needSize - = buffer . length ;
}
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
} finally {
if ( inputStream ! = null ) inputStream . close ( ) ;
if ( fos ! = null ) fos . close ( ) ;
if ( randomFile ! = null ) randomFile . close ( ) ;
if ( out ! = null ) out . close ( ) ;
FileSecurityUtil . deleteFile ( tempfile ) ;
//new FileDeleteUtil().deleteFile(tempfile);
}
}
/ * *
* ofd 下 载 逻 辑
* @param req
* @param res
* /
//本例中传入的url是类似 http://ip:port/DownloadServlet?docId=2&imageFileId=5
private void downloadOfd ( HttpServletRequest req , HttpServletResponse res , User user ) {
//本例中传入的url是类似 http://ip:port/DownloadServlet?docId=2&imageFileId=5
int docId = Util . getIntValue ( req . getParameter ( "docId" ) , - 1 ) ;
int imageFileId = Util . getIntValue ( req . getParameter ( "imageFileId" ) , - 1 ) ;
baseBean . writeLog ( "downloadOfd docId=" + docId + "###imageFileId=" + imageFileId ) ;
if ( imageFileId < = 0 ) return ;
if ( ! DocUtil . hasPemissionDownload ( user , imageFileId ) ) {
baseBean . writeLog ( "---------- downloadOfd 无下载权限---------imageFileId=" + imageFileId ) ;
return ;
}
InputStream is = null ;
BufferedOutputStream bos = null ;
try {
ImageFileManager imageFileManager = new ImageFileManager ( ) ;
imageFileManager . getImageFileInfoById ( imageFileId ) ;
res . setStatus ( 200 ) ;
res . setContentType ( "APPLICATION/OCTET-STREAM; charset=UTF-8" ) ;
res . setHeader ( "Content-Disposition" , "attachment; filename=" + new String ( imageFileManager . getImageFileName ( ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . getBytes ( "UTF-8" ) , "ISO-8859-1" ) + "" ) ;
res . setContentType ( "application/ofd" ) ;
//writeLogs("2353 downloadFlag=" + downloadFlag);
imageFileManager . setDownloadFlag ( Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2298348 wgs
is = imageFileManager . getInputStream ( ) ;
bos = new BufferedOutputStream ( res . getOutputStream ( ) ) ;
byte [ ] buf = new byte [ BUFFER_SIZE ] ;
int len = - 1 ;
while ( ( len = is . read ( buf ) ) ! = - 1 ) {
bos . write ( buf , 0 , len ) ;
}
bos . flush ( ) ;
} catch ( IOException exp ) {
exp . printStackTrace ( ) ;
} finally {
if ( is ! = null )
try {
is . close ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
if ( bos ! = null )
try {
bos . close ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
}
private void downloadForEmaill ( HttpServletRequest req , HttpServletResponse res ) {
//int fileid = Util.getIntValue(req.getParameter("fileid"));
int fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
MailFilePreviewService mfps = new MailFilePreviewService ( ) ;
InputStream imagefile = mfps . getInputStreamByMailFileId ( fileid + "" ) ;
String filename = Util . null2String ( mfps . getFileNameOnly ( fileid + "" ) ) ;
ServletOutputStream out = null ;
if ( imagefile ! = null ) {
try {
out = res . getOutputStream ( ) ;
res . setContentType ( "application/octet-stream" ) ;
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
} finally {
if ( out ! = null ) {
try {
out . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
if ( imagefile ! = null ) {
try {
imagefile . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
}
}
}
private void downloadForWebOffice ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException {
User user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
String fileid = Util . null2String ( req . getParameter ( "fileid" ) ) ;
if ( user = = null ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=4&user=null" ) ;
return ;
}
RecordSet rs = new RecordSet ( ) ;
RecordSet rsdoc = new RecordSet ( ) ;
rs . executeQuery ( "select a.id,b.docid,b.imagefilename from DocWebOffice a,DocImageFile b where a.fileid=? and a.imagefileid=b.imagefileid" , fileid ) ;
if ( rs . next ( ) ) {
String docid = rs . getString ( "docid" ) ;
DocCoopereateUtil dcu = new DocCoopereateUtil ( ) ;
DocViewPermission dvps = new DocViewPermission ( ) ;
Map < String , Boolean > levelMap = dvps . getShareLevel ( Util . getIntValue ( docid ) , user , false ) ;
boolean canRead = levelMap . get ( DocViewPermission . READ ) ;
boolean canCoope = dcu . jugeUserCoopeRight ( docid , user , canRead ) ;
if ( ! canCoope ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=3&fileid=" + fileid ) ;
return ;
}
Map < String , String > dataMap = new HashMap < String , String > ( ) ;
InputStream in = new WebOfficeServiceImpl ( ) . getInputStream ( rs . getInt ( "id" ) , dataMap ) ;
ServletOutputStream out = null ;
if ( in ! = null ) {
rsdoc . executeQuery ( "select docsubject from docdetail where id = " + docid ) ;
rsdoc . next ( ) ;
String docsubject = Util . null2String ( rsdoc . getString ( "docsubject" ) ) ;
String imagefilename = Util . null2String ( rs . getString ( "imagefilename" ) ) ;
String extname = imagefilename . contains ( "." ) ? imagefilename . substring ( imagefilename . lastIndexOf ( "." ) + 1 ) : "" ;
String filename = docsubject + "." + extname ;
if ( ( agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
// res.setHeader("content-disposition", "attachment;");
res . setHeader ( "content-disposition" , "attachment;filename=" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" )
. replaceAll ( "%29" , ")" ) . replaceAll ( "%7B" , "{" ) . replaceAll ( "%7D" , "}" ) . replaceAll ( "%5B" , "[" ) . replaceAll ( "%5D" , "]" ) . replaceAll ( "%40" , "@" ) . replaceAll ( "%23" , "#" ) . replaceAll ( "%25" , "%" ) . replaceAll ( "%26" , "&" )
. replaceAll ( "%2B" , "+" ) . replaceAll ( "%27" , "'" ) . replaceAll ( "%20" , " " ) ) ;
} else if ( agent . contains ( "Firefox" ) ) {
res . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
try {
out = res . getOutputStream ( ) ;
res . setContentType ( "application/octet-stream" ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
while ( ( byteread = in . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
} finally {
if ( out ! = null ) {
try {
out . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
if ( in ! = null ) {
try {
in . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
}
} else {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=2&fileid=" + fileid ) ;
return ;
}
} else {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=1&fileid=" + fileid ) ;
return ;
}
}
private void downloadForDoccenterCoop ( HttpServletRequest req , HttpServletResponse res ) throws ServletException , IOException {
User user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
String fileid = Util . null2String ( req . getParameter ( "fileid" ) ) ;
String fromfileid = Util . null2String ( req . getParameter ( "fromfileid" ) ) ;
String wpsFileid = Util . null2String ( req . getParameter ( "wpsFileid" ) ) ;
if ( user = = null ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=4&user=null" ) ;
return ;
}
if ( fromfileid = = null | | fromfileid . isEmpty ( ) ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?fromid=null" ) ;
return ;
}
String docid = "" ;
int fromecfileid = Util . getIntValue ( fileid ) ;
int ecfileid = 0 ;
String mould = "" ;
String ecFileName = "" ;
RecordSet rs = new RecordSet ( ) ;
String sql = "select * from wps_doccenter_fileinfo where wpsfileid = ? and fromecfileid = ? order by versionid desc" ;
rs . executeQuery ( sql , wpsFileid , fromfileid ) ;
if ( rs . next ( ) ) {
fromecfileid = rs . getInt ( "fromecfileid" ) ;
ecfileid = rs . getInt ( "ecfileid" ) ;
mould = Util . null2String ( rs . getString ( "mould" ) ) ;
ecFileName = Util . null2String ( rs . getString ( "filename" ) ) ;
} else {
ecfileid = fromecfileid ;
mould = "ecology" ;
}
sql = "select docid, imagefilename from docimagefile where imagefileid = ?" ;
rs . executeQuery ( sql , fromecfileid ) ;
if ( ! rs . next ( ) ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=1&wpsFileid=" + wpsFileid ) ;
return ;
}
docid = rs . getString ( "docid" ) ;
ecFileName = Util . null2String ( rs . getString ( "imagefilename" ) ) ;
DocCoopereateUtil dcu = new DocCoopereateUtil ( ) ;
DocViewPermission dvps = new DocViewPermission ( ) ;
Map < String , Boolean > levelMap = dvps . getShareLevel ( Util . getIntValue ( docid ) , user , false ) ;
boolean canRead = levelMap . get ( DocViewPermission . READ ) ;
boolean canCoope = dcu . jugeUserCoopeRight ( docid , user , canRead ) ;
if ( ! canCoope ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=3&fileid=" + wpsFileid ) ;
return ;
}
Map < String , String > dataMap = new HashMap < String , String > ( ) ;
InputStream in = new weaver . wps . doccenter . utils . FileInfoUtil ( ) . getInputStream ( ecfileid , mould ) ;
ServletOutputStream out = null ;
if ( null = = in ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?line=2&fileid=" + wpsFileid ) ;
return ;
}
rs . executeQuery ( "select docsubject from docdetail where id = " + docid ) ;
rs . next ( ) ;
String docsubject = Util . null2String ( rs . getString ( "docsubject" ) ) ;
String extname = ecFileName . contains ( "." ) ? ecFileName . substring ( ecFileName . lastIndexOf ( "." ) + 1 ) : "" ;
String filename = docsubject + "." + extname ;
if ( ( agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
// res.setHeader("content-disposition", "attachment;");
res . setHeader ( "content-disposition" , "attachment;filename=" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" )
. replaceAll ( "%29" , ")" ) . replaceAll ( "%7B" , "{" ) . replaceAll ( "%7D" , "}" ) . replaceAll ( "%5B" , "[" ) . replaceAll ( "%5D" , "]" ) . replaceAll ( "%40" , "@" ) . replaceAll ( "%23" , "#" ) . replaceAll ( "%25" , "%" ) . replaceAll ( "%26" , "&" )
. replaceAll ( "%2B" , "+" ) . replaceAll ( "%27" , "'" ) . replaceAll ( "%20" , " " ) ) ;
} else if ( agent . contains ( "Firefox" ) ) {
res . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
try {
out = res . getOutputStream ( ) ;
res . setContentType ( "application/octet-stream" ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
while ( ( byteread = in . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
} catch ( Exception e ) {
rs . writeLog ( FileDownload . class . getName ( ) , e ) ;
} finally {
Tools . cloze ( out ) ;
Tools . cloze ( in ) ;
}
}
/ * *
* 文 档 下 载
* @param req
* @param res
* /
private void downloadForDocument ( HttpServletRequest req , HttpServletResponse res , User user , boolean wmflag ) {
//int fileid = Util.getIntValue(req.getParameter("fileid"));
int fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
int isofficeview = Util . getIntValue ( Util . null2String ( req . getParameter ( "isofficeview" ) ) , - 1 ) ;
baseBean . writeLog ( "---------- downloadForDocument ---------fileid=" + fileid ) ;
if ( fileid < = 0 ) return ;
if ( ! DocUtil . hasPemissionDownload ( user , fileid ) ) {
baseBean . writeLog ( "---------- downloadForDocument 无下载权限---------fileid=" + fileid ) ;
return ;
}
InputStream imagefile = null ;
try {
ImageFileManager ifm = new ImageFileManager ( ) ;
ifm . getImageFileInfoById ( fileid ) ;
//writeLogs("2622 downloadFlag=" + downloadFlag);
ifm . setDownloadFlag ( Util . null2String ( req . getParameter ( "download" ) ) ) ; // 2298348 wgs
imagefile = ifm . getInputStream ( ) ;
String filename = ifm . getImageFileName ( ) ;
String contenttype = "" ;
if ( filename . toLowerCase ( ) . endsWith ( ".gif" ) ) {
contenttype = "image/gif" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".png" ) ) {
contenttype = "image/png" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".jpg" ) | | filename . toLowerCase ( ) . endsWith ( ".jpeg" ) ) {
contenttype = "image/jpg" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
} else if ( filename . toLowerCase ( ) . endsWith ( ".bmp" ) ) {
contenttype = "image/bmp" ;
res . addHeader ( "Cache-Control" , "private, max-age=8640000" ) ;
}
if ( isofficeview = = 1 ) {
String extName = filename . contains ( "." ) ? filename . substring ( filename . lastIndexOf ( "." ) + 1 ) : "" ;
Map < String , Object > secWmSetMap = WaterMarkUtil . getCategoryWmSet ( fileid + "" ) ;
if ( wmflag & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYVIEW ) ) & & "1" . equals ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYWMISOPEN ) ) & & "0" . equals ( secWmSetMap . get ( WaterMarkUtil . WATERCONTENTISNULL ) ) ) {
// imagefile = WaterMarkUtil.takefileWater(imagefile,user,filename,fileid,extName,WaterMarkUtil.MOULDDOC);
imagefile = FileWaterManager . takewater ( req , fileid + "" , filename , extName , imagefile , WaterMarkUtil . MOULDDOC , - 1 ) ;
}
}
ServletOutputStream out = res . getOutputStream ( ) ;
res . setContentType ( contenttype ) ;
res . setHeader ( "content-disposition" , "attachment; filename=\"" + new String ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . getBytes ( "UTF-8" ) , "ISO-8859-1" ) + "\"" ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
out . flush ( ) ;
out . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
} finally {
if ( imagefile ! = null ) {
try {
imagefile . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
}
}
//模板下载
private void downloadMould ( HttpServletRequest req , HttpServletResponse res , String type ) {
//int mouldid = Util.getIntValue(req.getParameter("fileid"));
int mouldid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
if ( mouldid < = 0 ) return ;
String mouldName = "" ;
String mouldPath = "" ;
String tableName = "" ;
String mouldtype = "" ;
int imagefileid = 0 ;
if ( "showMould" . equals ( type ) ) {
tableName = "docMould" ;
} else if ( "printMould" . equals ( type ) ) {
tableName = "OdocPrintMould" ;
} else {
tableName = "DocMouldFile" ;
}
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( "select mouldName,mouldPath,imagefileid,mouldtype from " + tableName + " where id=?" , mouldid ) ;
if ( rs . next ( ) ) {
mouldName = rs . getString ( "mouldName" ) ;
mouldPath = rs . getString ( "mouldPath" ) ;
imagefileid = rs . getInt ( "imagefileid" ) ;
mouldtype = rs . getString ( "mouldtype" ) ;
} else {
return ;
}
if ( "printMould" . equals ( type ) & & "2" . equals ( mouldtype ) ) {
mouldName + = ".docx" ;
} else if ( "2" . equals ( mouldtype ) ) {
mouldName + = ".doc" ;
} else if ( "3" . equals ( mouldtype ) ) {
mouldName + = ".xls" ;
} else if ( "4" . equals ( mouldtype ) ) {
mouldName + = ".wps" ;
}
InputStream is = null ;
try {
if ( imagefileid > 0 ) {
is = ImageFileManager . getInputStreamById ( imagefileid ) ;
} else {
is = new BufferedInputStream ( new FileInputStream ( mouldPath ) ) ;
}
res . setContentType ( "application/octet-stream" ) ;
ServletOutputStream out = res . getOutputStream ( ) ;
res . setHeader ( "content-disposition" , "attachment; filename=\"" + new String ( mouldName . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . getBytes ( "UTF-8" ) , "ISO-8859-1" ) + "\"" ) ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
while ( ( byteread = is . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
out . flush ( ) ;
out . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
} finally {
if ( is ! = null ) {
try {
is . close ( ) ;
} catch ( Exception e ) {
new BaseBean ( ) . writeLog ( e ) ;
}
}
}
}
/ * *
* 交 换 平 台 下 载 逻 辑
* @param req
* @param res
* /
private void downloadForExchange ( HttpServletRequest req , HttpServletResponse res ) {
String clientEcoding = "GBK" ;
try {
try {
String acceptlanguage = req . getHeader ( "Accept-Language" ) ;
if ( ! "" . equals ( acceptlanguage ) )
acceptlanguage = acceptlanguage . toLowerCase ( ) ;
if ( acceptlanguage . indexOf ( "zh-tw" ) > - 1 | | acceptlanguage . indexOf ( "zh-hk" ) > - 1 ) {
clientEcoding = "BIG5" ;
} else {
clientEcoding = "GBK" ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
User user = HrmUserVarify . getUser ( req , res ) ;
agent = req . getHeader ( "user-agent" ) ;
int fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
//int fileid = Util.getIntValue(req.getParameter("fileid"), -1);
int requestid = Util . getIntValue ( req . getParameter ( "requestid" ) ) ;
String ipstring = Util . getIpAddr ( req ) ;
Map < String , Object > jsonParams = new HashMap < String , Object > ( ) ;
int userid = 0 ;
if ( fileid < = 0 ) {
jsonParams = Json2MapUtil . requestJson2Map ( req ) ;
fileid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "fileid" ) ) ) ;
userid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "userid" ) ) ) ;
requestid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "requestid" ) ) ) ;
}
if ( fileid < = 0 ) { //转化为int型, 防止SQL注入
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v6" ) ;
return ;
}
RecordSet statement = new RecordSet ( ) ;
try {
boolean hasRight = false ;
try {
String companyId = getCompanyIdByUser ( user ) ;
hasRight = isHaveDownloadRight ( String . valueOf ( fileid ) , companyId ) ;
} catch ( Exception ex ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( ex ) ;
hasRight = false ;
}
if ( ! hasRight ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/notice/noright.jsp?v7" ) ;
return ;
}
String contenttype = "application/octet-stream" ;
String filename = "" ;
String filerealpath = "" ;
String signInfo = "" ;
String hashInfo = "" ;
String iszip = "" ;
String isencrypt = "" ;
String isaesencrypt = "" ;
String aescode = "" ;
String tokenKey = "" ;
String storageStatus = "" ;
String comefrom = "" ;
int byteread ;
byte data [ ] = new byte [ 1024 ] ;
String sql = "select t1.imagefilename,t1.filerealpath,t1.signinfo,t1.hashinfo,t1.iszip,t1.isencrypt,t1.imagefiletype , t1.imagefileid, t1.imagefile,t1.isaesencrypt,t1.aescode,t2.imagefilename as realname,t1.TokenKey,t1.StorageStatus,t1.comefrom from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + fileid ;
String extName = "" ;
statement . execute ( sql ) ;
if ( statement . next ( ) ) {
filename = Util . null2String ( statement . getString ( "imagefilename" ) ) ;
filerealpath = Util . null2String ( statement . getString ( "filerealpath" ) ) ;
signInfo = Util . null2String ( statement . getString ( "signinfo" ) ) ;
hashInfo = Util . null2String ( statement . getString ( "hashinfo" ) ) ;
iszip = Util . null2String ( statement . getString ( "iszip" ) ) ;
isencrypt = Util . null2String ( statement . getString ( "isencrypt" ) ) ;
isaesencrypt = Util . null2o ( statement . getString ( "isaesencrypt" ) ) ;
aescode = Util . null2String ( statement . getString ( "aescode" ) ) ;
tokenKey = Util . null2String ( statement . getString ( "TokenKey" ) ) ;
storageStatus = Util . null2String ( statement . getString ( "StorageStatus" ) ) ;
comefrom = Util . null2String ( statement . getString ( "comefrom" ) ) ;
try {
if ( ( agent . contains ( "Firefox" ) | | agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
res . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
res . setHeader ( "content-disposition" , "attachment; filename=\"" +
URLEncoder . encode ( filename . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
} catch ( Exception ecode ) {
ecode . printStackTrace ( ) ;
}
InputStream imagefile = null ;
ZipInputStream zin = null ;
File thefile = new File ( filerealpath ) ;
boolean signResult = false ;
if ( ! filerealpath . isEmpty ( ) & & ! signInfo . isEmpty ( ) & & ! hashInfo . isEmpty ( ) ) {
signResult = com . api . doc . util . DocEncryptUtil . verifyFile ( hashInfo , signInfo , filerealpath ) ;
// 附件下载,开始调用密码机解密
if ( ! signResult ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/integrityFailure.jsp?line=4&user=null" ) ;
return ;
}
}
if ( iszip . equals ( "1" ) ) {
zin = new ZipInputStream ( new FileInputStream ( thefile ) ) ;
if ( zin . getNextEntry ( ) ! = null ) imagefile = new BufferedInputStream ( zin ) ;
} else {
imagefile = new BufferedInputStream ( new FileInputStream ( thefile ) ) ;
}
ServletOutputStream out = null ;
try {
out = res . getOutputStream ( ) ;
res . setContentType ( contenttype ) ;
if ( isaesencrypt . equals ( "1" ) ) {
imagefile = AESCoder . decrypt ( imagefile , aescode ) ;
}
// 签名值校验通过,开始进行解密操作
if ( signResult ) {
imagefile = com . api . doc . util . DocEncryptUtil . decryptInput ( imagefile ) ;
if ( imagefile = = null ) {
res . sendRedirect ( GCONST . getContextPath ( ) + "/wui/common/page/integrityFailure.jsp?line=4&user=null" ) ;
return ;
}
}
while ( ( byteread = imagefile . read ( data ) ) ! = - 1 ) {
out . write ( data , 0 , byteread ) ;
out . flush ( ) ;
}
}
catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
if ( imagefile ! = null ) imagefile . close ( ) ;
if ( zin ! = null ) zin . close ( ) ;
if ( out ! = null ) out . flush ( ) ;
if ( out ! = null ) out . close ( ) ;
}
countDownloads ( "" + fileid ) ;
}
} catch ( Exception e ) {
BaseBean basebean = new BaseBean ( ) ;
basebean . writeLog ( e ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
/ * *
* 记 录 下 载 次 数 , 根 据 传 入 的 参 数 countdownloads = = 1
*
* /
private void countDownloads ( String fileid ) {
if ( this . isCountDownloads ) {
RecordSet rs = new RecordSet ( ) ;
String sqlStr = "UPDATE ImageFile Set downloads=downloads+1 WHERE imagefileid = " + fileid ;
//System.out.println("sqlStr ==" + sqlStr);
rs . execute ( sqlStr ) ;
}
}
/ * *
* 记 录 下 载 日 志
* @param userid 下 载 的 用 户 id
* @param userName 下 载 的 用 户 名 称
* @param imageid 下 载 的 文 档 id
* @param imageName 下 载 的 文 档 文 件 名 称
* /
private void downloadLog ( int userid , String userName , int imageid , String imageName , String ipstring ) {
SimpleDateFormat format = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" ) ;
String time = format . format ( new Date ( ) ) ;
User user = new User ( userid ) ;
RecordSet rs = new RecordSet ( ) ;
String sql = "select t2.id,t2.docsubject,t1.imagefilename from DocImageFile t1, DocDetail t2 where t1.docid=t2.id and t1.docfiletype<>1 and t1.imagefileid = " + imageid ;
int docid = - 1 ;
String docName = "" ;
rs . executeSql ( sql ) ;
if ( rs . next ( ) ) {
docid = rs . getInt ( 1 ) ;
docName = rs . getString ( 2 ) ;
imageName = Util . null2String ( rs . getString ( "imagefilename" ) ) ;
userid = new DocViewPermission ( ) . getUserid ( docid + "" , user ) ;
if ( userid < = 0 ) {
userid = user . getUID ( ) ;
}
sql = "insert into DownloadLog(userid, username, downloadtime, imageid, imagename, docid, docname,clientaddress) values(" + userid + ",'" + Util . toHtml100 ( userName ) + "','" + time + "'," + imageid + ",'" + Util . toHtml100 ( imageName ) + "'," + docid + ",'" + Util . toHtml100 ( docName ) + "','" + ipstring + "')" ;
rs . executeSql ( sql ) ;
}
DocDetailService dbs = new DocDetailService ( ) ;
dbs . resizeCount ( docid , DocDetailService . DOWNLOAD_COUNT ) ;
}
/ * *
* 判 断 是 否 有 下 载 特 定 文 件 的 权 限
* @param fileId 文 件 id
* @param req 请 求
* @param res 响 应
*
* @return boolean true : 有 下 载 的 权 限 false : 没 有 下 载 的 权 限
* /
private boolean getWhetherHasRight ( String fileId , HttpServletRequest req , HttpServletResponse res , int requestid , boolean fromMobile , Map < String , Object > jsonParams ) throws Exception {
toWriteLog ( "weaver-->2176-->fileid" + fileId + "--->ishr" + fileId ) ;
toWriteLog ( "weaver-->2176-->fileid" + fileId + "--->requestid" + requestid ) ;
toWriteLog ( "weaver-->2176-->fileid" + fileId + "--->fromMobile" + fromMobile ) ;
toWriteLog ( "weaver-->2176-->fileid" + fileId + "--->jsonParams" + jsonParams ) ;
jsonParams = jsonParams = = null ? new HashMap < String , Object > ( ) : jsonParams ;
//0:查看
boolean canReader = false ;
String fileid_head = fileId ;
int _userid = 0 ;
String groupid = "" ;
if ( fromMobile ) {
_userid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "userid" ) ) ) ;
groupid = Util . null2String ( jsonParams . get ( "groupid" ) ) ;
}
String download = Util . null2String ( jsonParams . get ( "download" ) ) ;
User user = new User ( _userid ) ;
if ( user = = null ) {
user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
}
//安全性检查
if ( fileId = = null | | fileId . trim ( ) . equals ( "" ) ) {
return false ;
}
RecordSet rs = new RecordSet ( ) ;
//是否必须授权 1: 是 0或其他: 否
String mustAuth = Util . null2String ( rs . getPropValue ( "FileDownload" , "mustAuth" ) ) ;
boolean hasRight = false ;
// boolean hasRight=true;
if ( mustAuth . equals ( "1" ) ) {
hasRight = false ;
}
boolean isDocFile = false ;
boolean isHtmlPreview = false ;
//文档模块 附件查看权限控制 开始
String docId = null ;
boolean isimage = false ;
List docIdList = new ArrayList ( ) ;
RecordSet rs2 = new RecordSet ( ) ;
rs2 . executeSql ( "select imagefilename,comefrom from ImageFile where imageFileId=" + fileId ) ;
String extName = "" ;
boolean isExtfile = false ;
boolean isPdf = false ;
if ( rs2 . next ( ) ) {
String filename = Util . null2String ( rs2 . getString ( "imagefilename" ) ) ;
if ( filename . indexOf ( "." ) > - 1 ) {
int bx = filename . lastIndexOf ( "." ) ;
if ( bx > = 0 ) {
extName = filename . substring ( bx + 1 , filename . length ( ) ) ;
}
}
String htmlcomefrom = Util . null2String ( rs2 . getString ( "comefrom" ) ) ;
if ( "WorkflowToDoc" . equals ( htmlcomefrom ) ) {
isHtmlPreview = true ;
}
if ( filename . toLowerCase ( ) . endsWith ( ".mp4" ) | | filename . toLowerCase ( ) . endsWith ( ".ogg" ) | | filename . toLowerCase ( ) . endsWith ( ".asf" ) | | filename . toLowerCase ( ) . endsWith ( ".mp3" ) | | filename . toLowerCase ( ) . endsWith ( ".wav" ) | | filename . toLowerCase ( ) . endsWith ( ".au" ) | | filename . toLowerCase ( ) . endsWith ( ".wma" ) ) {
isHtmlPreview = true ;
}
}
if ( "xls" . equalsIgnoreCase ( extName ) | | "xlsx" . equalsIgnoreCase ( extName ) | | "doc" . equalsIgnoreCase ( extName ) | | "docx" . equalsIgnoreCase ( extName ) | | "wps" . equalsIgnoreCase ( extName ) | | "ppt" . equalsIgnoreCase ( extName ) | | "pptx" . equalsIgnoreCase ( extName ) ) {
//isExtfile=true;
}
if ( "pdf" . equals ( extName . toLowerCase ( ) ) ) isPdf = true ;
String imgExtStr = Util . null2s ( baseBean . getPropValue ( "doc_download_img_ext" , "doc_img_ext" ) , "" ) ;
List < String > imgExtList = Arrays . asList ( imgExtStr . split ( "," ) ) ;
for ( int i = 0 ; i < imgExtList . size ( ) ; i + + ) {
String imgExt = imgExtList . get ( i ) . toLowerCase ( ) ;
if ( imgExt . equals ( extName . toLowerCase ( ) ) ) {
isimage = true ;
break ;
}
}
// if("gif".equalsIgnoreCase(extName)||"png".equalsIgnoreCase(extName)||"jpg".equalsIgnoreCase(extName)||"jpeg".equalsIgnoreCase(extName)||"bmp".equalsIgnoreCase(extName)||"svg".equalsIgnoreCase(extName)){
// isimage=true;
// }
rs . executeSql ( "select docId from docImageFile where imageFileId=" + fileId ) ;
while ( rs . next ( ) ) {
hasRight = false ;
docId = rs . getString ( 1 ) ;
if ( docId ! = null & & ! docId . equals ( "" ) ) {
docIdList . add ( docId ) ;
}
}
boolean previewSensitive = false ;
String comefrom = "" ;
String originComeFrom = "" ;
if ( docIdList . size ( ) = = 0 ) {
int fileId_related = 0 ;
int docId_related = 0 ;
boolean hasDocId = false ;
rs . executeSql ( "select comefrom from ImageFile where imageFileId=" + fileId ) ;
if ( rs . next ( ) ) {
comefrom = Util . null2String ( rs . getString ( "comefrom" ) ) ;
}
String comefrom_noNeedLogin = Util . null2String ( rs . getPropValue ( "FileDownload" , "comefrom_noNeedLogin" ) ) ;
if ( ( "," + comefrom_noNeedLogin + "," ) . indexOf ( "," + comefrom + "," ) > = 0 ) {
hasRight = true ;
return hasRight ;
}
if ( comefrom . equals ( "DocPreview" ) | | comefrom . equals ( "DocPreviewHistory" ) ) {
rs . executeSql ( "select imageFileId,docId from " + comefrom + " where (pdfFileId=" + fileId + " or swfFileId=" + fileId + ") order by id desc" ) ;
if ( rs . next ( ) ) {
fileId_related = Util . getIntValue ( rs . getString ( "imageFileId" ) , 0 ) ;
//docId_related=Util.getIntValue(rs.getString("docId"),0);
}
if ( docId_related > 0 ) {
docIdList . add ( "" + docId_related ) ;
hasDocId = true ;
}
} else if ( comefrom . equals ( "DocPreviewHtml" ) | | comefrom . equals ( "DocPreviewHtmlHistory" ) ) {
rs . executeSql ( "select imageFileId,docId from " + comefrom + " where htmlFileId=" + fileId + " order by id desc" ) ;
if ( rs . next ( ) ) {
fileId_related = Util . getIntValue ( rs . getString ( "imageFileId" ) , 0 ) ;
// docId_related=Util.getIntValue(rs.getString("docId"),0);
}
if ( docId_related > 0 ) {
docIdList . add ( "" + docId_related ) ;
hasDocId = true ;
}
isHtmlPreview = true ;
} else if ( comefrom . equals ( "DocPreviewHtmlImage" ) ) {
rs . executeSql ( "select imageFileId,docId from DocPreviewHtmlImage where picFileId=" + fileId + " order by id desc" ) ;
if ( rs . next ( ) ) {
fileId_related = Util . getIntValue ( rs . getString ( "imageFileId" ) , 0 ) ;
//docId_related=Util.getIntValue(rs.getString("docId"),0);
}
if ( docId_related > 0 ) {
docIdList . add ( "" + docId_related ) ;
hasDocId = true ;
}
}
// 处理敏感词高亮
if ( isHtmlPreview & & fileId_related > 0 ) {
int originalFileId = - 1 ;
String querySql = "select original_fileid from imagefile where IMAGEFILEID = " + fileId_related + " and sensitive_wtype = 1" ;
rs . executeQuery ( querySql ) ;
if ( rs . next ( ) ) {
originalFileId = rs . getInt ( 1 ) ;
}
if ( originalFileId > 0 ) {
fileId_related = originalFileId ;
previewSensitive = true ;
}
}
if ( ! hasDocId & & fileId_related > 0 ) {
rs . executeSql ( "select distinct docId from docImageFile where imageFileId=" + fileId_related ) ;
while ( rs . next ( ) ) {
docId = rs . getString ( 1 ) ;
if ( docId ! = null & & ! docId . equals ( "" ) ) {
docIdList . add ( docId ) ;
}
}
}
if ( fileId_related > 0 ) {
originComeFrom = comefrom ;
rs . executeSql ( "select comefrom from ImageFile where imageFileId=" + fileId_related ) ;
if ( rs . next ( ) ) {
comefrom = Util . null2String ( rs . getString ( "comefrom" ) ) ;
}
fileId = fileId_related + "" ;
}
if ( ! hasDocId & & fileId_related = = 0 ) {
extName = extName . toLowerCase ( ) ;
if ( extName . equals ( "jpg" ) | |
extName . equals ( "jpeg" ) | |
extName . equals ( "png" ) | |
extName . equals ( "gif" ) | |
extName . equals ( "bmp" ) ) {
int _docid = Util . getIntValue ( req . getParameter ( "docid" ) ) ;
if ( _docid > 0 ) {
rs . executeQuery ( "select id from DocDetail where id=? and themeshowpic=?" , _docid , fileId ) ;
if ( rs . next ( ) ) {
docIdList . add ( rs . getString ( "id" ) ) ;
}
}
}
}
}
if ( docIdList . size ( ) > 0 ) {
hasRight = false ;
}
String mustLogin = Util . null2String ( rs . getPropValue ( "FileDownload" , "mustLogin" ) ) ;
int votingId = Util . getIntValue ( req . getParameter ( "votingId" ) , 0 ) ;
if ( fromMobile & & votingId < = 0 ) {
votingId = Util . getIntValue ( Util . null2String ( jsonParams . get ( "votingId" ) ) , 0 ) ;
}
if ( user = = null & & fromMobile ) {
user = new User ( _userid ) ;
}
if ( user = = null ) {
if ( mustLogin . equals ( "1" ) ) {
hasRight = false ;
}
return hasRight ;
}
if ( ! fromMobile ) {
String f_weaver_belongto_userid = Util . null2String ( req . getParameter ( "f_weaver_belongto_userid" ) ) ; //需要增加的代码
String f_weaver_belongto_usertype = Util . null2String ( req . getParameter ( "f_weaver_belongto_usertype" ) ) ; //需要增加的代码
user = HrmUserVarify . getUser ( req , res , f_weaver_belongto_userid , f_weaver_belongto_usertype ) ; //需要增加的代码
}
String workplanid = Util . null2String ( req . getParameter ( "workplanid" ) ) ;
if ( fromMobile ) {
workplanid = Util . null2String ( jsonParams . get ( "workplanid" ) ) ;
}
if ( user = = null ) {
user = ( User ) req . getSession ( true ) . getAttribute ( "weaver_user@bean" ) ;
}
if ( user = = null ) {
if ( mustLogin . equals ( "1" ) ) {
hasRight = false ;
}
return hasRight ;
}
String comefrom_noNeedAuth = Util . null2String ( rs . getPropValue ( "FileDownload" , "comefrom_noNeedAuth" ) ) ;
if ( ( "," + comefrom_noNeedAuth + "," ) . indexOf ( "," + comefrom + "," ) > = 0 ) {
hasRight = true ;
return hasRight ;
}
if ( comefrom . equals ( "VotingAttachment" ) ) { //
VotingManager votingManager = new VotingManager ( ) ;
return votingManager . hasRightByFileid ( votingId , Util . getIntValue ( fileId , 0 ) , user ) ;
}
DocManager docManager = new DocManager ( ) ;
String docStatus = "" ;
int isHistory = 0 ;
int secCategory = 0 ;
String docPublishType = "" ; //文档发布类型 1:正常(不发布) 2:新闻 3:标题新闻
boolean useNewRightCheck = 1 = = Util . getIntValue ( baseBean . getPropValue ( "FileDownload" , "useNewRightCheck" ) , 1 ) ;
DocViewPermission dvp = new DocViewPermission ( ) ;
for ( int i = 0 ; i < docIdList . size ( ) & & ! hasRight ; i + + ) {
docId = ( String ) docIdList . get ( i ) ;
isDocFile = true ;
if ( docId = = null | | docId . trim ( ) . equals ( "" ) ) {
continue ;
}
docManager . resetParameter ( ) ;
docManager . setId ( Integer . parseInt ( docId ) ) ;
docManager . getDocInfoById ( ) ;
docStatus = docManager . getDocstatus ( ) ;
isHistory = docManager . getIsHistory ( ) ;
secCategory = docManager . getSeccategory ( ) ;
docPublishType = docManager . getDocpublishtype ( ) ;
if ( docPublishType ! = null & & ( docPublishType . equals ( "2" ) | | docPublishType . equals ( "3" ) ) ) {
String newsClause = "" ;
String sqlDocExist = " select 1 from DocDetail where id=" + docId + " " ;
String sqlNewsClauseOr = "" ;
boolean hasOuterNews = false ;
rs . executeSql ( "select newsClause from DocFrontPage where publishType='0'" ) ;
while ( rs . next ( ) ) {
hasOuterNews = true ;
newsClause = Util . null2String ( rs . getString ( "newsClause" ) ) ;
if ( newsClause . equals ( "0" ) )
{
//newsClause=" 1=1 ";
hasRight = true ;
return hasRight ;
}
if ( ! newsClause . trim ( ) . equals ( "" ) ) {
//sqlDocExist+=" and "+newsClause;
sqlNewsClauseOr + = " ^_^ (" + newsClause + ")" ;
}
}
ArrayList newsArr = new ArrayList ( ) ;
if ( ! sqlNewsClauseOr . equals ( "" ) & & ! hasRight ) {
//sqlNewsClauseOr=sqlNewsClauseOr.substring(sqlNewsClauseOr.indexOf("("));
//sqlDocExist+=" and ("+sqlNewsClauseOr+") ";
String [ ] newsPage = Util . TokenizerString2 ( sqlNewsClauseOr , "^_^" ) ;
int k = 0 ;
String newsWhere = "" ;
for ( ; k < newsPage . length ; k + + ) {
if ( k % 10 = = 0 ) {
newsArr . add ( newsWhere ) ;
newsWhere = "" ;
newsWhere + = newsPage [ k ] ;
} else
newsWhere + = " or " + newsPage [ k ] ;
}
newsArr . add ( newsWhere ) ;
}
//System.out.print(sqlDocExist);
if ( hasOuterNews & & ! hasRight ) {
for ( int j = 1 ; j < newsArr . size ( ) ; j + + ) {
String newsp = newsArr . get ( j ) . toString ( ) ;
if ( j = = 1 )
newsp = newsp . substring ( newsp . indexOf ( "or" ) + 2 ) ;
sqlDocExist + = "and(" + newsp + ")" ;
rs . executeSql ( sqlDocExist ) ;
sqlDocExist = " select 1 from DocDetail where id=" + docId + " " ;
if ( rs . next ( ) ) {
hasRight = false ;
break ;
}
}
}
}
if ( user = = null ) {
continue ;
}
String userId = "" + user . getUID ( ) ;
String loginType = user . getLogintype ( ) ;
if ( useNewRightCheck ) {
Map < String , Boolean > shareLevelMap = dvp . getShareLevel ( Util . getIntValue ( docId ) , user , false ) ;
canReader = shareLevelMap . get ( DocViewPermission . READ ) ;
hasRight = shareLevelMap . get ( DocViewPermission . DOWNLOAD ) ;
} else {
String userSeclevel = user . getSeclevel ( ) ;
String userType = "" + user . getType ( ) ;
String userDepartment = "" + user . getUserDepartment ( ) ;
String userSubComany = "" + user . getUserSubCompany1 ( ) ;
String userInfo = loginType + "_" + userId + "_" + userSeclevel + "_" + userType + "_" + userDepartment + "_" + userSubComany ;
ArrayList PdocList = null ;
SpopForDoc spopForDoc = new SpopForDoc ( ) ;
PdocList = spopForDoc . getDocOpratePopedom ( "" + docId , userInfo ) ;
SecCategoryComInfo secCategoryComInfo = new SecCategoryComInfo ( ) ;
//1:编辑
boolean canEdit = false ;
//5:下载
if ( ( ( String ) PdocList . get ( 0 ) ) . equals ( "true" ) ) { canReader = true ; }
if ( ( ( String ) PdocList . get ( 1 ) ) . equals ( "true" ) ) { canEdit = true ; }
if ( ( ( String ) PdocList . get ( 5 ) ) . equals ( "true" ) ) { hasRight = true ; } //TD12005
String readerCanViewHistoryEdition = secCategoryComInfo . isReaderCanViewHistoryEdition ( secCategory ) ? "1" : "0" ;
if ( canReader & & ( ( ! docStatus . equals ( "7" ) & & ! docStatus . equals ( "8" ) )
| | ( docStatus . equals ( "7" ) & & isHistory = = 1 & & readerCanViewHistoryEdition . equals ( "1" ) )
) ) {
canReader = true ;
} else {
canReader = false ;
}
if ( isHistory = = 1 ) {
if ( secCategoryComInfo . isReaderCanViewHistoryEdition ( secCategory ) ) {
if ( canReader & & ! canEdit ) canReader = true ;
} else {
if ( canReader & & ! canEdit ) canReader = false ;
}
}
if ( canEdit & & ( ( docStatus . equals ( "3" ) | | docStatus . equals ( "5" ) | | docStatus . equals ( "6" ) | | docStatus . equals ( "7" ) ) | | isHistory = = 1 ) ) {
canEdit = false ;
canReader = true ;
}
if ( canEdit & & ( docStatus . equals ( "0" ) | | docStatus . equals ( "1" ) | | docStatus . equals ( "2" ) | | docStatus . equals ( "7" ) ) & & ( isHistory ! = 1 ) )
canEdit = true ;
else
canEdit = false ;
}
if ( previewSensitive & & ( canReader | | hasRight ) ) {
return true ;
}
if ( ( isPdf | | isHtmlPreview ) & & ! "1" . equals ( download ) & & ! hasRight & & canReader ) {
hasRight = true ;
}
if ( canReader ) {
//String referer = req.getHeader("Referer");
//String ismobile=req.getHeader("User-Agent");
if ( isimage ) {
hasRight = true ;
}
}
if ( hasRight ) {
return hasRight ;
}
//E9流程判断
String authStr = Util . null2String ( req . getParameter ( "authStr" ) ) ;
String authSignatureStr = Util . null2String ( req . getParameter ( "authSignatureStr" ) ) ;
toWriteLog ( "weaver-->2505-->fileid" + fileId + "--->hasRight" + hasRight ) ;
toWriteLog ( "weaver-->2505-->fileid" + fileId + "--->canReader" + canReader ) ;
toWriteLog ( "weaver-->2505-->fileid" + fileId + "--->isExtfile" + isExtfile ) ;
toWriteLog ( "weaver-->2505-->fileid" + fileId + "--->authStr" + authStr ) ;
toWriteLog ( "weaver-->2505-->fileid" + fileId + "--->authSignatureStr" + authSignatureStr ) ;
if ( ! canReader & & ( ( ! authStr . isEmpty ( ) & & ! authSignatureStr . isEmpty ( ) ) | | requestid > 0 ) ) {
RequestAuthenticationService e9wf = new RequestAuthenticationService ( ) ;
e9wf . setUser ( user ) ;
e9wf . setAuthResouceType ( 1 ) ;
e9wf . setAuthResouceId ( docId ) ;
hasRight = e9wf . verify ( req , requestid ) ;
if ( ! hasRight ) {
rs . writeLog ( "^^^^^^ E9流程判断附件下载没权限(" + fileId + ")(" + docId + ")^^^^^^^^requestid=" +
requestid + ",authStr=" + authStr + ",authSignatureStr=" + authSignatureStr ) ;
Map < String , String > otherParams = new HashMap < String , String > ( ) ;
otherParams . put ( "requestid" , requestid + "" ) ;
otherParams . put ( "ismonitor" , 1 + "" ) ;
hasRight = e9wf . getRequestMonitorRight ( otherParams , requestid ) ;
if ( ! hasRight ) {
rs . writeLog ( "^^^^^^ E9流程判断流程监控附件下载没权限(" + fileId + ")(" + docId + ")^^^^^^^^requestid=" +
requestid + ",authStr=" + authStr + ",authSignatureStr=" + authSignatureStr ) ;
}
}
}
if ( ! canReader & & ! hasRight ) { //如果没有查看权限,判断是否通过协作区赋权
int desrequestid = Util . getIntValue ( req . getParameter ( "desrequestid" ) ) ;
int wfdesrequestid = Util . getIntValue ( String . valueOf ( req . getSession ( ) . getAttribute ( "desrequestid" ) ) , 0 ) ;
//System.out.println("wfdesrequestid = "+wfdesrequestid);
int coworkid = Util . getIntValue ( req . getParameter ( "coworkid" ) ) ;
if ( fromMobile ) {
desrequestid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "desrequestid" ) ) ) ;
wfdesrequestid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "desrequestid" ) ) ) ;
coworkid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "coworkid" ) ) ) ;
}
CoworkDAO coworkDAO = new CoworkDAO ( coworkid ) ;
VotingManager votingManager = new VotingManager ( ) ;
Map parameterMap = new HashMap ( ) ;
parameterMap . put ( "docId" , Util . getIntValue ( docId ) ) ;
parameterMap . put ( "votingId" , votingId ) ;
parameterMap . put ( "userId" , user . getUID ( ) ) ;
//微博下载权限
BlogDao blogDao = new BlogDao ( ) ;
int blogDiscussid = Util . getIntValue ( req . getParameter ( "blogDiscussid" ) , 0 ) ;
if ( fromMobile & & blogDiscussid < = 0 ) {
blogDiscussid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "blogDiscussid" ) ) ) ;
}
/ * WFUrgerManager wfum = new WFUrgerManager ( ) ;
RequestAnnexUpload rau = new RequestAnnexUpload ( ) ;
if ( ! wfum . OperHaveDocViewRight ( requestid , user . getUID ( ) , Util . getIntValue ( loginType , 1 ) , "" + docId )
& & ! wfum . OperHaveDocViewRight ( requestid , desrequestid , Util . getIntValue ( userId ) , Util . getIntValue ( loginType ) , "" + docId )
& & ! wfum . getWFShareDesRight ( requestid , wfdesrequestid , user , Util . getIntValue ( loginType ) , "" + docId )
& & ! wfum . getWFChatShareRight ( requestid , Util . getIntValue ( userId ) , Util . getIntValue ( loginType ) , "" + docId )
& & ! wfum . UrgerHaveDocViewRight ( requestid , Util . getIntValue ( userId ) , Util . getIntValue ( loginType ) , "" + docId )
& & ! wfum . getMonitorViewObjRight ( requestid , Util . getIntValue ( userId ) , "" + docId , "0" )
& & ! wfum . getWFShareViewObjRight ( requestid , user , "" + docId , "0" )
& & ! rau . HaveAnnexDocViewRight ( requestid , Util . getIntValue ( userId ) , Util . getIntValue ( loginType ) , Util . getIntValue ( docId ) )
& & ! coworkDAO . haveRightToViewDoc ( userId , docId ) & & ! votingManager . haveViewVotingDocRight ( parameterMap )
& & ! blogDao . appViewRight ( "doc" , userId , Util . getIntValue ( docId , 0 ) , blogDiscussid ) ) {
hasRight = false ;
} else {
hasRight = true ;
} * /
if ( ! coworkDAO . haveRightToViewDoc ( userId , docId ) & & ! votingManager . haveViewVotingDocRight ( parameterMap )
& & ! blogDao . appViewRight ( "doc" , userId , Util . getIntValue ( docId , 0 ) , blogDiscussid ) ) {
hasRight = false ;
} else {
hasRight = true ;
}
}
if ( ! canReader & & ! hasRight ) { //如果没有查看权限,判断是否通过会议赋权
int meetingid = Util . getIntValue ( req . getParameter ( "meetingid" ) ) ;
MeetingUtil MeetingUtil = new MeetingUtil ( ) ;
if ( meetingid > 0 ) {
hasRight = MeetingUtil . UrgerHaveMeetingDocViewRight ( meetingid + "" , user , Util . getIntValue ( loginType ) , "" + docId ) ;
} else {
hasRight = MeetingUtil . UrgerHaveMeetingDocViewRight ( user , Util . getIntValue ( loginType ) , "" + docId ) ;
}
}
if ( ! canReader & & ! hasRight & & ! workplanid . equals ( "" ) ) { //如果没有查看权限,判断是否通过日程赋权
WorkPlanService workPlanService = new WorkPlanService ( ) ;
if ( ! workPlanService . UrgerHaveWorkplanDocViewRight ( workplanid , user , Util . getIntValue ( loginType ) , "" + docId ) ) {
hasRight = false ;
} else {
hasRight = true ;
}
}
//判断是否计划任务赋权
String fromworktask = Util . getFileidIn ( Util . null2String ( req . getParameter ( "fromworktask" ) ) ) ;
String operatorid = Util . getFileidIn ( Util . null2String ( req . getParameter ( "operatorid" ) ) ) ;
if ( fromMobile ) {
fromworktask = Util . null2String ( jsonParams . get ( "blogDiscussid" ) ) ;
operatorid = Util . null2String ( jsonParams . get ( "operatorid" ) ) ;
}
if ( "1" . equals ( fromworktask ) ) {
/ * WTRequestUtil WTRequestUtil = new WTRequestUtil ( ) ;
if ( ! canReader & & ! hasRight ) {
if ( ! WTRequestUtil . UrgerHaveWorktaskDocViewRight ( requestid , Util . getIntValue ( userId ) , Util . getIntValue ( docId , 0 ) , Util . getIntValue ( operatorid , 0 ) ) ) {
hasRight = false ;
} else {
hasRight = true ;
}
} else {
hasRight = true ;
} * /
}
//如果没有权限,看到是否具有客户联系查看权限
if ( ! canReader & & ! hasRight ) { //如果没有查看权限,判断是否通过会议赋权
CrmShareBase crmshare = new CrmShareBase ( ) ;
String crmid = Util . null2String ( req . getParameter ( "crmid" ) ) ;
if ( fromMobile ) {
crmid = Util . null2String ( jsonParams . get ( "crmid" ) ) ;
}
int sharetype = crmshare . getRightLevelForCRM ( userId + "" , crmid , loginType ) ;
String crmtype = Util . null2String ( req . getParameter ( "crmtype" ) ) ;
if ( fromMobile ) {
crmtype = Util . null2String ( jsonParams . get ( "crmtype" ) ) ;
}
if ( crmtype = = null | | "" . equals ( crmtype ) ) crmtype = "0" ;
if ( sharetype > 0 & & crmshare . checkCrmFileExist ( crmid , fileId , crmtype ) ) {
//CoworkDAO coworkDAO = new CoworkDAO();
//coworkDAO.shareCoworkRelateddoc(Util.getIntValue(loginType),Util.getIntValue(docId,0),Util.getIntValue(userId));
hasRight = true ;
} else {
hasRight = false ;
}
}
// 如果没有下载权限,查找是否协作区附件赋权
if ( ! hasRight ) {
int coworkid = Util . getIntValue ( req . getParameter ( "coworkid" ) ) ;
if ( fromMobile ) {
coworkid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "coworkid" ) ) ) ;
}
CoworkDAO coworkDAO = new CoworkDAO ( coworkid ) ;
hasRight = coworkDAO . haveRightToViewDoc ( userId , docId ) ;
}
//财务模块 发票影像
String cwid = req . getParameter ( "cwid" ) ;
toWriteLog ( "weaver-->2679-->fileid" + fileId + "--->cwid" + cwid ) ;
toWriteLog ( "weaver-->2679-->fileid" + fileId + "--->hasRight" + hasRight ) ;
if ( ! hasRight & & "fna" . equals ( cwid ) ) {
hasRight = weaver . fna . invoice . utils . ImagePermissionUtil . checkImagePermission ( Util . getIntValue ( fileId ) , user ) ;
if ( ! hasRight ) {
rs . writeLog ( "^^^^^^ 财务模块 发票影像 财务判断附件下载没权限(" + fileId + ")(" + docId + ")^^^^^^^^" ) ;
}
}
toWriteLog ( "weaver-->2687-->fileid" + fileId + "--->hasRight" + hasRight ) ;
//财务模块 微报账规则制度
if ( ! hasRight & & "fna" . equals ( cwid ) ) {
RecordSet rs_ruleSystem = new RecordSet ( ) ;
//获取规则制度
int ruleSystem = 0 ;
rs_ruleSystem . executeQuery ( "select ruleSystem from fnaInvoiceEnterWay " ) ;
if ( rs . next ( ) ) {
ruleSystem = Util . getIntValue ( rs_ruleSystem . getString ( "ruleSystem" ) , 0 ) ;
}
if ( ruleSystem = = Util . getIntValue ( fileId ) & & ruleSystem ! = 0 ) {
hasRight = true ;
}
}
toWriteLog ( "weaver-->2892-->fileid" + fileId + "--->hasRight" + hasRight ) ;
if ( new DocViewPermission ( ) . hasRightFromOtherMould ( Util . getIntValue ( docId ) , user , req ) ) {
hasRight = true ;
if ( "1" . equals ( download ) ) {
hasRight = new DocViewPermission ( ) . hasDownRightFromFormMode ( Util . getIntValue ( docId ) , user , req ) ;
}
}
if ( hasRight ) {
return hasRight ;
}
}
//文档模块 附件查看权限控制 结束
if ( "email" . equals ( req . getParameter ( "model" ) ) ) { //邮件附件转html
boolean emailFlag = new MailFilePreviewService ( ) . getViewRightByHtmlCode ( user . getUID ( ) , fileId ) ; //fileId
if ( emailFlag ) {
return true ;
} else {
rs . writeLog ( "^^^^^^ email判断附件下载没权限(" + fileId + ")^^^^^^^^" ) ;
return false ;
}
}
if ( docIdList . size ( ) = = 0 & & "EMforEC" . equals ( comefrom ) ) {
hasRight = false ;
}
//检查社交平台附加权限
if ( ! hasRight & & "EMforEC" . equals ( comefrom ) ) {
//hasRight=SocialIMService.checkFileRight(user, fileId, isDocFile, hasRight);
if ( ! groupid . isEmpty ( ) ) {
rs . executeQuery ( "select groupid from social_IMFileShareGroup where groupid=? and fileid=?" , groupid , Util . getIntValue ( fileId ) ) ;
if ( rs . next ( ) ) {
hasRight = true ;
}
}
if ( ! hasRight ) {
rs . executeQuery ( "select id from social_IMFileShare where userid=? and fileid=?" , user . getUID ( ) , Util . getIntValue ( fileId ) ) ;
if ( rs . next ( ) ) {
hasRight = true ;
}
}
} else if ( ! hasRight & & "EMforECNoRight" . equals ( comefrom ) ) {
hasRight = true ;
} else if ( ! hasRight ) {
hasRight = SocialIMService . checkFileRight ( user , fileId , isDocFile , hasRight ) ;
}
if ( ! hasRight ) { //查看是否有建模关联授权
//表单建模判断关联授权
String formmodeflag = StringHelper . null2String ( req . getParameter ( "formmode_authorize" ) ) ;
Map < String , String > formmodeAuthorizeInfo = new HashMap < String , String > ( ) ;
//formmodeparas+="&formmode_authorize="+formmodeflag;
if ( formmodeflag . equals ( "formmode_authorize" ) ) {
int modeId = 0 ;
int formmodebillId = 0 ;
int fieldid = 0 ;
int formModeReplyid = 0 ;
modeId = Util . getIntValue ( req . getParameter ( "authorizemodeId" ) , 0 ) ;
formmodebillId = Util . getIntValue ( req . getParameter ( "authorizeformmodebillId" ) , 0 ) ;
fieldid = Util . getIntValue ( req . getParameter ( "authorizefieldid" ) , 0 ) ;
formModeReplyid = Util . getIntValue ( req . getParameter ( "authorizeformModeReplyid" ) , 0 ) ;
String fMReplyFName = Util . null2String ( req . getParameter ( "authorizefMReplyFName" ) ) ;
if ( fromMobile & & modeId < = 0 ) {
modeId = Util . getIntValue ( Util . null2String ( jsonParams . get ( "authorizemodeId" ) ) ) ;
formmodebillId = Util . getIntValue ( Util . null2String ( jsonParams . get ( "authorizeformmodebillId" ) ) ) ;
fieldid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "authorizefieldid" ) ) ) ;
formModeReplyid = Util . getIntValue ( Util . null2String ( jsonParams . get ( "authorizeformModeReplyid" ) ) ) ;
fMReplyFName = Util . null2String ( jsonParams . get ( "fMReplyFName" ) ) ;
}
ModeRightInfo modeRightInfo = new ModeRightInfo ( ) ;
modeRightInfo . setUser ( user ) ;
if ( formModeReplyid ! = 0 ) {
formmodeAuthorizeInfo = modeRightInfo . isFormModeAuthorize ( formmodeflag , modeId , formmodebillId , fieldid , Util . getIntValue ( docId ) , formModeReplyid , fMReplyFName ) ;
} else {
formmodeAuthorizeInfo = modeRightInfo . isFormModeAuthorize ( formmodeflag , modeId , formmodebillId , fieldid , Util . getIntValue ( docId ) ) ;
}
}
if ( "1" . equals ( formmodeAuthorizeInfo . get ( "AuthorizeFlag" ) ) ) { //如果是表单建模的关联授权,那么直接有查看权限
hasRight = true ;
}
}
if ( ! hasRight ) {
//数据中心查看文档权限
String edcFlag = StringHelper . null2String ( req . getParameter ( "edc_authorize" ) ) ;
if ( edcFlag . equals ( "edc_authorize" ) ) {
int formid = Util . getIntValue ( req . getParameter ( "authorizeFormId" ) , 0 ) ;
int billid = Util . getIntValue ( req . getParameter ( "authorizeBillId" ) , 0 ) ;
int fieldid = Util . getIntValue ( req . getParameter ( "authorizeFieldId" ) , 0 ) ;
hasRight = JoinCubeBiz . checkDocViewPermission ( user , formid , billid , fieldid , Util . getIntValue ( docId ) ) ;
}
}
//建模扩展查看文档权限
if ( ! hasRight ) {
String ecmeflag = StringHelper . null2String ( req . getParameter ( "ecme_authorize" ) ) ;
if ( ecmeflag . equals ( "ecme_authorize" ) ) {
int billid = Util . getIntValue ( req . getParameter ( "authorizebillId" ) , 0 ) ;
int fieldid = Util . getIntValue ( req . getParameter ( "authorizefieldid" ) , 0 ) ;
int feaId = Util . getIntValue ( req . getParameter ( "authorizefeaId" ) , 0 ) ;
EcmeRightManager erm = new EcmeRightManager ( user , feaId ) ;
hasRight = erm . ecmeAuthorize ( billid , fieldid , Util . getIntValue ( docId ) ) ;
}
}
//财务模块微报账记一笔
String cwid = req . getParameter ( "cwid" ) ;
if ( ! hasRight & & "fnaRemember" . equals ( cwid ) ) {
int count = 0 ;
rs . executeQuery ( "select count(id) cnt from fnaTakeOneNote where imageid=?" , fileId ) ;
if ( rs . next ( ) ) {
count = Util . getIntValue ( rs . getString ( "cnt" ) , 0 ) ;
}
if ( count > 0 ) {
hasRight = true ;
}
}
if ( hasRight ) {
return hasRight ;
}
toWriteLog ( "weaver-->2702-->fileid" + fileId + "--->hasRight" + hasRight ) ;
String isHaveDocSql = "select 1 from docimagefile where imagefileid = ?" ;
Boolean isHaveDoc = false ;
rs . executeQuery ( isHaveDocSql , fileId ) ;
if ( rs . next ( ) ) isHaveDoc = true ;
//如果附件无文档文档,且无权限看,
if ( ! hasRight & & ! isHaveDoc ) {
String fileidStr = Util . null2s ( req . getParameter ( "fileid" ) , "" ) ;
String jmFileidStr = Util . null2s ( req . getParameter ( "jmFileid" ) , "" ) ;
String fieldidsStr = Util . null2s ( req . getParameter ( "fieldids" ) , "" ) ;
int fileid = Util . getIntValue ( DocDownloadCheckUtil . getDownloadfileid ( req ) , - 1 ) ;
String fieldids = Util . null2String ( DocDownloadCheckUtil . getDownloadfileid ( req ) ) ;
//如果是加密串并且fileid存在, 则可以下载 如果是批量下载, 需要不含逗号, 长度大于11( 防止只有一个附件id的情况) , 并且附件id存在
if ( ( fileidStr . length ( ) > 11 & & fileid > 0 ) | | ( jmFileidStr . length ( ) > 11 & & fileid > 0 ) | | ( ! fieldidsStr . contains ( "," ) & & fileId ! = null & & ! fileId . trim ( ) . equals ( "" ) & & fieldidsStr . length ( ) > 11 ) ) {
hasRight = true ;
}
}
/ * *
* 判 断 是 否 来 自 云 盘 分 享 的 下 载
* /
// if(!hasRight){ 加密串导致hasRight为true, 从而云盘文件不进此判断逻辑
hasRight = FiledownloadUtil . netdiskHasright ( hasRight , fileid_head , user ) ;
//}
/ * *
* 判 断 是 否 来 自 云 盘 的 poi 转 换
* /
if ( comefrom ! = null & & ! comefrom . isEmpty ( ) | | ! originComeFrom . isEmpty ( ) ) {
String sql = "" ;
if ( comefrom . isEmpty ( ) ) {
comefrom = originComeFrom ;
}
if ( "DocPreviewHtmlImage" . equals ( comefrom ) ) {
sql = "select imageFileId from DocPreviewHtmlImage where picFileId=?" ;
} else if ( "DocPreviewHtml" . equals ( comefrom ) ) {
sql = "select imagefileid from DocPreviewHtml where htmlFileId=?" ;
} else if ( "pdfconvert" . equals ( comefrom ) ) {
sql = "select imagefileid from pdf_imagefile where pdfimagefileid=?" ;
}
if ( ! sql . isEmpty ( ) ) {
rs . executeQuery ( sql , fileid_head ) ;
if ( rs . next ( ) ) {
String _fileid = rs . getString ( "imagefileid" ) ;
hasRight = FiledownloadUtil . netdiskHasright ( hasRight , _fileid , user ) ;
}
}
}
//判断附件是否来源于回复
String isFromReplySql = "select 1 from reply_imagefile where imagefileid=?" ;
rs . executeQuery ( isFromReplySql , fileId ) ;
if ( rs . next ( ) ) {
hasRight = true ;
}
//pdf附件判断user权限是否一致
cwid = req . getParameter ( "cwid" ) ;
if ( "compared" . equals ( cwid ) ) {
String sqlDetail = " select mainid from FnaDocCompareDetail where 1=1 " +
"and (leftSrc = ? or leftSrc2 = ? or rightSrc = ? or rightSrc2 = ? ) " ;
rs . executeQuery ( sqlDetail , fileId , fileId , fileId , fileId ) ;
int mainId = 0 ;
if ( rs . next ( ) ) {
mainId = Util . getIntValue ( rs . getString ( "mainid" ) , 0 ) ;
}
rs . executeQuery ( " select userid from FnaDocCompare where id = ? " , mainId ) ;
if ( rs . next ( ) ) {
int userIdMain = Util . getIntValue ( rs . getString ( "userid" ) ) ;
if ( userIdMain ! = user . getUID ( ) ) {
hasRight = false ;
} else {
hasRight = true ;
}
}
if ( ! hasRight ) {
String sqlMain = " select userid from FnaDocCompare where 1=1 and (left_entry_ids = ? or left_pdf_id = ? or right_entry_ids = ? or right_pdf_id = ?) " ;
rs . executeQuery ( sqlMain , fileId , fileId , fileId , fileId ) ;
if ( rs . next ( ) ) {
int userIdMain = Util . getIntValue ( rs . getString ( "userid" ) ) ;
if ( userIdMain ! = user . getUID ( ) ) {
hasRight = false ;
} else {
hasRight = true ;
}
}
}
}
baseBean . writeLog ( "weaver-->2917-->fileid" + fileId + "--->hasRight:" + hasRight ) ;
return hasRight ;
}
// 下载公用方法
public void toUpload ( HttpServletResponse response , String str ) {
toUpload ( response , str , str ) ;
}
public void toUpload ( HttpServletResponse response , String str , String tmptfilename ) {
try {
SystemComInfo syscominfo = new SystemComInfo ( ) ;
String path = syscominfo . getFilesystem ( ) ;
if ( "" . equals ( path ) ) {
path = GCONST . getRootPath ( ) ;
path = path + "filesystem" + File . separatorChar + "downloadBatch" + File . separatorChar + tmptfilename ;
} else {
if ( path . endsWith ( File . separator ) ) {
path + = "downloadBatch" + File . separatorChar + File . separatorChar + tmptfilename ;
} else {
path + = File . separator + "downloadBatch" + File . separatorChar + File . separatorChar + tmptfilename ;
}
}
//String path=GCONST.getRootPath()+ "downloadBatch"+File.separatorChar+str;
//String path="E:/bjls_ecology4.1_5.0/ecology/downloadBatch/"+str;
if ( ! "" . equals ( path ) ) {
File file = new File ( path ) ;
if ( file . exists ( ) ) {
InputStream ins = null ;
BufferedInputStream bins = null ;
OutputStream outs = null ;
BufferedOutputStream bouts = null ;
try
{
ins = new FileInputStream ( path ) ;
bins = new BufferedInputStream ( ins ) ; //放到缓冲流里面
outs = response . getOutputStream ( ) ; //获取文件输出IO流
bouts = new BufferedOutputStream ( outs ) ;
response . setContentType ( "application/x-download" ) ; //设置response内容的类型
if ( ( agent . contains ( " Chrome" ) | | agent . contains ( "Safari" ) ) & & ! agent . contains ( "Edge" ) ) {
response . setHeader ( "content-disposition" , "attachment;filename=\"" + URLEncoder . encode ( str . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" )
. replaceAll ( "%29" , ")" ) . replaceAll ( "%7B" , "{" ) . replaceAll ( "%7D" , "}" ) . replaceAll ( "%5B" , "[" ) . replaceAll ( "%5D" , "]" ) . replaceAll ( "%40" , "@" ) . replaceAll ( "%23" , "#" ) . replaceAll ( "%25" , "%" ) . replaceAll ( "%26" , "&" )
. replaceAll ( "%2B" , "+" ) + "\"" ) ;
// response.setHeader("content-disposition", "attachment; filename*=UTF-8''" + URLEncoder.encode(str.replaceAll("<", "").replaceAll(">", "").replaceAll("<", "").replaceAll(">", ""),"UTF-8").replaceAll("\\+", "%20").replaceAll("%28", "(").replaceAll("%29", ")"));
} else if ( agent . contains ( "Firefox" ) ) {
// filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
// res.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
// filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
// res.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
// filename = "=?UTF-8?B?" + (new String(Base64.encodeBase64(filename.getBytes("UTF-8")))) + "?=";
// res.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", filename));
response . setHeader ( "content-disposition" , "attachment; filename*=UTF-8''" + URLEncoder . encode ( str . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) ) ;
} else {
response . setHeader ( "content-disposition" , "attachment; filename=\"" + URLEncoder . encode ( str . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) . replaceAll ( "<" , "" ) . replaceAll ( ">" , "" ) , "UTF-8" ) . replaceAll ( "\\+" , "%20" ) . replaceAll ( "%28" , "(" ) . replaceAll ( "%29" , ")" ) + "\"" ) ;
}
int bytesRead = 0 ;
byte [ ] buffer = new byte [ 8192 ] ;
//开始向网络传输文件流
while ( ( bytesRead = bins . read ( buffer , 0 , 8192 ) ) ! = - 1 ) {
bouts . write ( buffer , 0 , bytesRead ) ;
}
bouts . flush ( ) ; //这里一定要调用flush()方法
ins . close ( ) ;
bins . close ( ) ;
outs . close ( ) ;
bouts . close ( ) ;
}
catch ( Exception ef )
{
new weaver . filter . XssUtil ( ) . writeError ( ef ) ;
}
finally {
if ( ins ! = null ) ins . close ( ) ;
if ( bins ! = null ) bins . close ( ) ;
if ( outs ! = null ) outs . close ( ) ;
if ( bouts ! = null ) bouts . close ( ) ;
}
}
else {
response . sendRedirect ( GCONST . getContextPath ( ) + "/login/BatchDownloadsEror.jsp" ) ;
}
}
else {
response . sendRedirect ( GCONST . getContextPath ( ) + "/login/BatchDownloadsEror.jsp" ) ;
//注;这里面不要用到PrintWriter out=response.getWriter();这里调用了response对象, 后面下载调用时就会出错。这里要是想都用, 希望大家找到解决办法。
}
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
/ * *
* 3 : 打 包 完 成 后 删 除 原 来 的 目 中 的 文 件
* @param
* @param
* @throws Exception
* /
public void deleteFile ( String targetPath ) throws IOException {
File targetFile = new File ( targetPath ) ;
if ( targetFile . isDirectory ( ) ) {
if ( targetPath . indexOf ( "downloadBatchTemp" ) > - 1 ) {
// FileUtils.deleteDirectory(targetFile);
new FileDeleteUtil ( ) . deleteFolder ( targetFile ) ;
}
} else if ( targetFile . isFile ( ) ) {
FileSecurityUtil . deleteFile ( targetFile ) ;
//new FileDeleteUtil().deleteFile(targetFile);
}
}
/ *
*
* /
public boolean addDownLoadLogByimageId ( int fileid ) {
boolean needUser = true ;
int docId = 0 ;
String docIdsForOuterNews = "" ;
// String strSql = "select id from DocDetail where exists (select 1 from docimagefile where imagefileid=" + fileid + " and docId=DocDetail.id) and ishistory <> 1 and (docPublishType='2' or docPublishType='3')";
String strSql = "SELECT t1.id FROM DocDetail t1 INNER JOIN docimagefile t2 ON t1.id = t2.docId " +
"WHERE t2.imagefileid = ? AND t1.ishistory <> 1 AND ( t1.docPublishType = '2' OR t1.docPublishType = '3')" ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( strSql , fileid ) ;
while ( rs . next ( ) ) {
docId = rs . getInt ( "id" ) ;
if ( docId > 0 ) {
docIdsForOuterNews + = "," + docId ;
}
}
if ( ! docIdsForOuterNews . equals ( "" ) ) {
docIdsForOuterNews = docIdsForOuterNews . substring ( 1 ) ;
}
if ( ! docIdsForOuterNews . equals ( "" ) ) {
String newsClause = "" ;
String sqlDocExist = " select 1 from DocDetail where id in(" + docIdsForOuterNews + ") " ;
String sqlNewsClauseOr = "" ;
boolean hasOuterNews = false ;
rs . executeSql ( "select newsClause from DocFrontPage where publishType='0'" ) ;
while ( rs . next ( ) ) {
hasOuterNews = true ;
newsClause = Util . null2String ( rs . getString ( "newsClause" ) ) ;
if ( newsClause . equals ( "" ) ) {
// newsClause=" 1=1 ";
needUser = false ;
break ;
}
if ( ! newsClause . trim ( ) . equals ( "" ) ) {
sqlNewsClauseOr + = " ^_^ (" + newsClause + ")" ;
}
}
ArrayList newsArr = new ArrayList ( ) ;
if ( ! sqlNewsClauseOr . equals ( "" ) & & needUser ) {
// sqlNewsClauseOr=sqlNewsClauseOr.substring(sqlNewsClauseOr.indexOf("("));
// sqlDocExist+=" and ("+sqlNewsClauseOr+") ";
String [ ] newsPage = Util . TokenizerString2 ( sqlNewsClauseOr , "^_^" ) ;
int i = 0 ;
String newsWhere = "" ;
for ( ; i < newsPage . length ; i + + ) {
if ( i % 10 = = 0 ) {
newsArr . add ( newsWhere ) ;
newsWhere = "" ;
newsWhere + = newsPage [ i ] ;
} else
newsWhere + = " or " + newsPage [ i ] ;
}
newsArr . add ( newsWhere ) ;
}
// System.out.print(sqlDocExist);
if ( hasOuterNews & & needUser ) {
for ( int j = 1 ; j < newsArr . size ( ) ; j + + ) {
String newsp = newsArr . get ( j ) . toString ( ) ;
if ( j = = 1 )
newsp = newsp . substring ( newsp . indexOf ( "or" ) + 2 ) ;
sqlDocExist + = "and(" + newsp + ")" ;
rs . executeSql ( sqlDocExist ) ;
sqlDocExist = " select 1 from DocDetail where id in(" + docIdsForOuterNews + ") " ;
if ( rs . next ( ) ) {
needUser = false ;
break ;
}
}
}
}
// 处理外网查看默认图片
rs . executeSql ( "SELECT * FROM DocPicUpload WHERE Imagefileid=" + fileid ) ;
if ( rs . next ( ) ) {
needUser = false ;
}
return needUser ;
}
/ * *
* creat Folder and File .
* @param String fileFoder , String fileName
* Copyright ( c ) 2010
* Company weaver
* Create Time 2010 - 11 - 25
* @author caizhijun001
* @return File
* /
public File fileCreate ( String fileFoder , String fileName ) {
File foder = new File ( fileFoder ) ; //E:\dlxdq_ecology4.5\ecology\filesystem\201012\S 1450623393_.xls
File file = new File ( fileFoder + fileName ) ;
//如果文件夹不存在,则创建文件夹
if ( foder . exists ( ) = = false ) {
foder . mkdirs ( ) ; //多级目录
//foder.mkdir();//只创建一级目录
}
if ( file . exists ( ) = = true ) { //删除以前同名的txt文件
try {
FileSecurityUtil . deleteFile ( file ) ;
//new FileDeleteUtil().deleteFile(file);
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
//如果文件不存在,则创建文件
if ( file . exists ( ) = = false ) {
try {
file . createNewFile ( ) ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
return file ;
}
private 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 ;
}
private 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 ;
}
/ * *
* 通 过 文 件 编 号 和 单 位 编 号 判 断 此 单 位 是 否 对 此 文 件 有 下 载 权 限
* @param fileId 文 件 编 号 对 应 imagefile 表 中 的 imagefileId
* @param companyId 单 位 编 号
* @return true : 有 下 载 权 限 false : 无 下 载 权 限
* /
private boolean isHaveDownloadRight ( String fileId , String companyId ) {
boolean isHaveDownloadRight = false ;
if ( StringUtil . isNull ( fileId , companyId ) ) {
baseBean . writeLog ( "方法: FileDownloadForOdocExchange.isHaveDownloadRight 参数: fileId=" + fileId + " companyId=" + companyId ) ;
return isHaveDownloadRight ;
}
/**如何判断当前用户有下载权限*/
RecordSet rs = new RecordSet ( ) ;
/**1:作废的文不允许下载 2:撤销的文不允许接收方下载*/
/ * *
* 1 : 判 断 是 否 是 发 送 方
* 2 : 判 断 是 否 是 接 收 方
* /
String getIsSendDepartmentSql = "" ;
String dbType = rs . getDBType ( ) ;
if ( "sqlserver" . equals ( dbType ) ) {
getIsSendDepartmentSql = "select * from odoc_exchange_docbase where send_companyid=? and (docimagefileid=? or ',' + attachimagefileids + ',' like '%,' + ? + ',%') and status!=5" ;
} else if ( "mysql" . equals ( dbType ) ) {
getIsSendDepartmentSql = "select * from odoc_exchange_docbase where send_companyid=? and (docimagefileid=? or CONCAT(',',attachimagefileids,',') like CONCAT('%,',?,',%')) and status!=5" ;
} else {
getIsSendDepartmentSql = "select * from odoc_exchange_docbase where send_companyid=? and (docimagefileid=? or ',' || attachimagefileids || ',' like '%,' || ? || ',%') and status!=5" ;
}
boolean isGetIsSendDepartmentSql = rs . executeQuery ( getIsSendDepartmentSql , companyId , fileId , fileId ) ;
if ( isGetIsSendDepartmentSql & & rs . next ( ) ) {
isHaveDownloadRight = true ;
} else {
baseBean . writeLog ( "方法: FileDownloadForOdocExchange.isHaveDownloadRight 执行sql: getIsSendDepartmentSql=" + getIsSendDepartmentSql + " 无数据/作废状态的文不允许下载" ) ;
}
String getIsReceiveDepartmentSql = "" ;
if ( "sqlserver" . equals ( dbType ) ) {
getIsReceiveDepartmentSql = "select b.status from odoc_exchange_docbase a left join odoc_exchange_recieveinfo b on a.document_identifier=b.document_identifier where b.receive_companyid=? and (a.docimagefileid=? or ',' + a.attachimagefileids + ',' like '%,' + ? + ',%') and a.status!=5 and b.status!=4" ;
} else if ( "mysql" . equals ( dbType ) ) {
getIsReceiveDepartmentSql = "select b.status from odoc_exchange_docbase a left join odoc_exchange_recieveinfo b on a.document_identifier=b.document_identifier where b.receive_companyid=? and (a.docimagefileid=? or CONCAT(',',attachimagefileids,',') like CONCAT('%,',?,',%')) and a.status!=5 and b.status!=4" ;
} else {
getIsReceiveDepartmentSql = "select b.status from odoc_exchange_docbase a left join odoc_exchange_recieveinfo b on a.document_identifier=b.document_identifier where b.receive_companyid=? and (a.docimagefileid=? or ',' || a.attachimagefileids || ',' like '%,' || ? || ',%') and a.status!=5 and b.status!=4" ;
}
boolean isGetIsReceiveDepartmentSql = rs . executeQuery ( getIsReceiveDepartmentSql , companyId , fileId , fileId ) ;
if ( isGetIsReceiveDepartmentSql & & rs . next ( ) ) {
isHaveDownloadRight = true ;
} else {
baseBean . writeLog ( "方法: FileDownloadForOdocExchange.isHaveDownloadRight 执行sql: getIsReceiveDepartmentSql=" + getIsReceiveDepartmentSql + "无数据/作废/撤销状态的文不允许下载" ) ;
}
return isHaveDownloadRight ;
}
/ * *
* 通 过 当 前 登 录 用 户 获 取 当 前 登 陆 用 户 所 在 单 位 编 号
* @param uesr 当 前 登 录 用 户
* @return 单 位 编 号
* /
private String getCompanyIdByUser ( User user ) {
String companyId = "" ;
if ( null = = user ) {
baseBean . writeLog ( "FileDownloadForOdocExchange.getCompanyIdByUser 参数: user" + user ) ;
return companyId ;
}
String sqlForReceiveOrSendUser = "SELECT exchange_companyid FROM odoc_exchange_com_user WHERE userid=?" ;
String sqlForCompanyAdminUser = "SELECT exchange_companyid FROM odoc_exchange_com_admin WHERE admin_userid=?" ;
RecordSet rs = new RecordSet ( ) ;
boolean isSqlForReceiveOrSendUser = rs . executeQuery ( sqlForReceiveOrSendUser , user . getUID ( ) ) ;
if ( isSqlForReceiveOrSendUser & & rs . next ( ) ) {
companyId = rs . getString ( "exchange_companyid" ) ;
if ( StringUtil . isNull ( companyId ) ) {
boolean isSqlForCompanyAdminUser = rs . executeQuery ( sqlForCompanyAdminUser , user . getUID ( ) ) ;
if ( isSqlForCompanyAdminUser & & rs . next ( ) ) {
companyId = rs . getString ( "exchange_companyid" ) ;
} else {
baseBean . writeLog ( "FileDownloadForOdocExchange.getCompanyIdByUser 执行sql: sqlForCompanyAdminUser" + sqlForCompanyAdminUser + "参数: user.getUID()=" + user . getUID ( ) + "失败或查询数据为空" ) ;
}
} else {
baseBean . writeLog ( "FileDownloadForOdocExchange.getCompanyIdByUser 执行sql: sqlForReceiveOrSendUser" + sqlForReceiveOrSendUser + "参数: user.getUID()=" + user . getUID ( ) + "查询的单位编号为空" ) ;
}
} else {
baseBean . writeLog ( "FileDownloadForOdocExchange.getCompanyIdByUser 执行sql: sqlForReceiveOrSendUser" + sqlForReceiveOrSendUser + "参数: user.getUID()=" + user . getUID ( ) + "失败或查询数据为空" ) ;
}
return companyId ;
}
/ * *
* 判 断 此 后 缀 是 否 允 许 inline 模 式 打 开
* @param extname
* @return
* /
private boolean inlineViewFile ( String extname ) {
if ( extname . isEmpty ( ) ) return false ;
String whiteListstr = Util . null2s ( baseBean . getPropValue ( "doc_upload_suffix_limit" , "inline_ext" ) , "pdf,jpg,jpeg,png,bmp,gif" ) ;
String [ ] whiteList = whiteListstr . split ( "," ) ;
String ext = "" ;
for ( int i = 0 ; i < whiteList . length ; i + + ) {
ext = whiteList [ i ] ;
if ( extname . toLowerCase ( ) . equals ( ext ) ) {
return true ;
}
}
return false ;
}
private void toWriteLog ( String log ) {
systemWaterwriteLog = Util . null2s ( baseBean . getPropValue ( "doc_custom_for_weaver" , "systemWaterwriteLog" ) , "0" ) ;
if ( "1" . equals ( systemWaterwriteLog ) ) {
baseBean . writeLog ( FileDownload . class . getName ( ) , log ) ;
}
}
private void writeLogs ( Object log ) {
if ( "1" . equals ( writeLogForDownload ) ) {
baseBean . writeLog ( FileDownload . class . getName ( ) , log ) ;
}
}
private boolean odocSmartRegist ( int fileid ) {
boolean isOdocSmartRegist = false ;
RecordSet recordSet = new RecordSet ( ) ;
String sql = "select b.comefrom from pdf_imagefile a left join imagefile b on a.imagefileid=b.imagefileid where a.pdfimagefileid=?" ;
recordSet . executeQuery ( sql , fileid ) ;
if ( recordSet . next ( ) ) {
if ( "smartRegistration" . equals ( recordSet . getString ( "comefrom" ) ) ) {
isOdocSmartRegist = true ;
}
}
if ( ! isOdocSmartRegist ) {
String sql1 = "select comefrom from imagefile where imagefileid=?" ;
recordSet . executeQuery ( sql1 , fileid ) ;
if ( recordSet . next ( ) ) {
if ( "smartRegistration" . equals ( recordSet . getString ( "comefrom" ) ) ) {
isOdocSmartRegist = true ;
}
}
}
return isOdocSmartRegist ;
}
private String getSecondAuthFileDownUrl ( HttpServletRequest req , boolean fromMobile , int docid ) {
String secondAuthFileDownUrl = "" ;
try {
String isSecondAuth = Util . null2String ( req . getParameter ( "isSecondAuth" ) ) ;
if ( ! "1" . equals ( isSecondAuth ) & & docid > 0 ) {
Map < String , String > encryptInfo = DocEncryptUtil . EncryptInfo ( docid ) ;
if ( encryptInfo ! = null ) {
String isEnableSecondAuth = Util . null2String ( encryptInfo . get ( DocEncryptUtil . ISENABLESECONDAUTH ) , "0" ) ;
if ( "1" . equals ( isEnableSecondAuth ) ) {
StringBuilder requParamStr = new StringBuilder ( ) ;
Enumeration paramNames = req . getParameterNames ( ) ;
while ( paramNames . hasMoreElements ( ) ) {
String paramName = ( String ) paramNames . nextElement ( ) ;
String paramValue = Util . null2String ( req . getParameter ( paramName ) ) ;
if ( paramName . contains ( "request_header_user_agent" ) | | paramName . contains ( "param_ip" ) ) continue ;
requParamStr . append ( "&" ) . append ( paramName ) . append ( "=" ) . append ( paramValue ) ;
}
if ( fromMobile ) {
secondAuthFileDownUrl = GCONST . getContextPath ( ) + "/spa/custom/static4mobile/index.html#/cs/app/2e1b09c0329c4e839002365027216f64_baseTable?isSecondAuth=1" + requParamStr ;
} else {
secondAuthFileDownUrl = GCONST . getContextPath ( ) + "/spa/custom/static/index.html#/main/cs/app/759eb4fa5ce742c2a0b96877972ceae0_baseTable?isSecondAuth=1" + requParamStr ;
}
toWriteLog ( "FileDownload-------------getSecondAuthFileDownUrl------docid------" + docid + ";fromMobile=" + fromMobile + ";secondAuthFileDownUrl=" + secondAuthFileDownUrl ) ;
}
}
}
} catch ( Exception e ) {
toWriteLog ( "FileDownload-------------getSecondAuthFileDownUrl------docid------" + docid + ";fromMobile=" + fromMobile + ";Exception=" + e ) ;
}
return secondAuthFileDownUrl ;
}
/ * *
* 2447956 wgs 当 是 下 载 文 件 请 求 , 并 且 文 件 所 在 目 录 开 启 下 载 水 印 时 ,
* 验 证 文 件 加 密 类 型 , 如 果 是 加 密 文 件 ,
* 不 允 许 通 过 服 务 加 水 印 ( 服 务 加 水 印 是 在 文 件 解 密 后 操 作 的 , 这 样 下 载 的 就 不 是 原 加 密 文 件 了 )
* /
public void shouldAddFileDownLoadWm ( Map < String , Object > secWmSetMap , String imageFileId , String downloadFlag ) {
RecordSet rs = new RecordSet ( ) ;
try {
String wmfordownload = Util . null2String ( secWmSetMap . get ( WaterMarkUtil . SECCATEGORYDOWNLOAD ) ) ;
rs . writeLog ( "shouldAddFileDownLoadWm 1 wmfordownload=" + wmfordownload ) ;
if ( secWmSetMap = = null | | secWmSetMap . size ( ) = = 0 | | ! "1" . equals ( downloadFlag ) | | ! "1" . equals ( wmfordownload ) ) {
return ;
}
rs . executeQuery ( "select encryptType from imagefile where imagefileid=?" , imageFileId ) ;
rs . next ( ) ;
String encryptType = rs . getString ( "encryptType" ) ;
rs . writeLog ( "shouldAddFileDownLoadWm 1 encryptType=" + encryptType + ",imageFileId=" + imageFileId ) ;
if ( StringUtils . isBlank ( encryptType ) ) {
EncryptDecryptFileUtil . updateFileEncryptInfo ( Util . getIntValue ( imageFileId ) ) ;
rs . executeQuery ( "select encryptType from imagefile where imagefileid=?" , imageFileId ) ;
rs . next ( ) ;
encryptType = rs . getString ( "encryptType" ) ;
}
rs . writeLog ( "shouldAddFileDownLoadWm 2 encryptType=" + encryptType ) ;
if ( StringUtils . isNotBlank ( encryptType ) & & ! "1" . equals ( encryptType ) ) {
secWmSetMap . put ( WaterMarkUtil . SECCATEGORYDOWNLOAD , "0" ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
rs . writeLog ( "2 secWmSetMap.get(WaterMarkUtil.SECCATEGORYDOWNLOAD)=" + secWmSetMap . get ( WaterMarkUtil . SECCATEGORYDOWNLOAD ) ) ;
}
}