369 lines
10 KiB
Java
369 lines
10 KiB
Java
|
/*
|
|||
|
* Created on 2014-11-04
|
|||
|
* Copyright (c) 2001-2014 泛微软件
|
|||
|
* 泛微协同商务系统,版权所有。
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
package weaver.alioss;
|
|||
|
|
|||
|
import weaver.alioss.AliOSSObjectUtil;
|
|||
|
import weaver.conn.RecordSet;
|
|||
|
import weaver.file.AESCoder;
|
|||
|
import weaver.file.Prop;
|
|||
|
import weaver.general.BaseBean;
|
|||
|
import weaver.general.IpUtils;
|
|||
|
import weaver.general.Util;
|
|||
|
|
|||
|
import javax.servlet.http.HttpServletRequest;
|
|||
|
import java.io.BufferedInputStream;
|
|||
|
import java.io.File;
|
|||
|
import java.io.FileInputStream;
|
|||
|
import java.io.InputStream;
|
|||
|
import java.util.zip.ZipInputStream;
|
|||
|
|
|||
|
/**
|
|||
|
* Description: 阿里云基本类
|
|||
|
* @author 方观生
|
|||
|
* @date 2014-11-04
|
|||
|
*/
|
|||
|
|
|||
|
public class AliOSSObjectManager extends BaseBean {
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 构造函数
|
|||
|
*/
|
|||
|
public AliOSSObjectManager() {
|
|||
|
try {
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 上传文件到阿里云
|
|||
|
* @param filerealpath 文件存储路径
|
|||
|
* @param filename 文件名称
|
|||
|
* @param iszip 是否压缩
|
|||
|
* @param isaesencrypt 是否加密
|
|||
|
* @param aescode 加密串
|
|||
|
*/
|
|||
|
public void uploadFile(final String filerealpath,final String filename,final String iszip,final String isaesencrypt,final String aescode){
|
|||
|
//判断阿里云工具类能否正常加载
|
|||
|
if(!isexistAliOSSObjectUtil()){
|
|||
|
return ;
|
|||
|
}
|
|||
|
//判断是否启用了阿里云
|
|||
|
if(!AliOSSObjectUtil.isEnable()){
|
|||
|
return ;
|
|||
|
}
|
|||
|
|
|||
|
try {
|
|||
|
if(isonlyAliOSS()){
|
|||
|
uploadFileThread(filerealpath, filename, iszip, isaesencrypt,aescode);
|
|||
|
}else{
|
|||
|
new Thread(new Runnable() {
|
|||
|
public void run() {
|
|||
|
uploadFileThread(filerealpath, filename, iszip, isaesencrypt,aescode);
|
|||
|
}
|
|||
|
}).start();
|
|||
|
}
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* 上传文件到阿里云 线程方法
|
|||
|
* @param filerealpath 文件存储路径
|
|||
|
* @param filename 文件名称
|
|||
|
* @param iszip 是否压缩
|
|||
|
* @param isaesencrypt 是否加密
|
|||
|
* @param aescode 加密串
|
|||
|
*/
|
|||
|
private void uploadFileThread(String filerealpath,String filename,String iszip,String isaesencrypt,String aescode){
|
|||
|
|
|||
|
InputStream imagefile = null;
|
|||
|
try {
|
|||
|
String tokenKey=this.getTokenKeyByFileRealPath(filerealpath);
|
|||
|
File thefile = new File(filerealpath) ;
|
|||
|
|
|||
|
if(iszip.equals("1")) {
|
|||
|
ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile)) ;
|
|||
|
if(zin.getNextEntry() != null)
|
|||
|
imagefile = new BufferedInputStream(zin);
|
|||
|
} else{
|
|||
|
imagefile = new BufferedInputStream(new FileInputStream(thefile)) ;
|
|||
|
}
|
|||
|
if(isaesencrypt.equals("1")){
|
|||
|
imagefile = AESCoder.decrypt(imagefile, aescode);
|
|||
|
}
|
|||
|
AliOSSObjectUtil.autoUploadFile(tokenKey, filename,imagefile);
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}finally{
|
|||
|
try{
|
|||
|
if(imagefile!=null){
|
|||
|
imagefile.close() ;
|
|||
|
}
|
|||
|
}catch(Exception ex){
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* 根据文件存储路径获取存储Key
|
|||
|
* @param filerealpath 文件存储路径
|
|||
|
* @return 存储Key
|
|||
|
*/
|
|||
|
public static String getTokenKeyByFileRealPath(String filerealpath){
|
|||
|
String tokenKey="";
|
|||
|
try {
|
|||
|
if(filerealpath==null||filerealpath.trim().equals("")){
|
|||
|
return tokenKey;
|
|||
|
}
|
|||
|
int i = filerealpath.lastIndexOf("/");
|
|||
|
int j = filerealpath.lastIndexOf("\\");
|
|||
|
int index = i >j?i:j;
|
|||
|
if(index<0){
|
|||
|
return tokenKey;
|
|||
|
}
|
|||
|
int point = 0;
|
|||
|
String tempstr = filerealpath.substring(index,filerealpath.length());
|
|||
|
if(tempstr.indexOf(".")!=-1){
|
|||
|
point = index + tempstr.lastIndexOf(".");
|
|||
|
}else{
|
|||
|
point = filerealpath.length();
|
|||
|
}
|
|||
|
tokenKey = filerealpath.substring(index-8,point)+".wfile";
|
|||
|
tokenKey = tokenKey.replaceAll("\\\\", "/");
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
return tokenKey;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断当前用户是否通过云盘查看文档
|
|||
|
* @param req 页面请求信息
|
|||
|
* @return 是否能够通过云盘查看文档
|
|||
|
*/
|
|||
|
public static boolean isEnableForDsp(HttpServletRequest req){
|
|||
|
boolean isEnableForDsp=false;
|
|||
|
try {
|
|||
|
if(!isexistAliOSSObjectUtil()){
|
|||
|
return isEnableForDsp;
|
|||
|
}
|
|||
|
boolean isEnable=AliOSSObjectUtil.isEnable();
|
|||
|
if(!isEnable){
|
|||
|
return isEnableForDsp;
|
|||
|
}
|
|||
|
String ip=Util.getIpAddr(req);
|
|||
|
boolean checktmp = checkIpInner(ip);
|
|||
|
if(isEnable&&(!checktmp)){
|
|||
|
isEnableForDsp=true;
|
|||
|
}
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
return isEnableForDsp;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断该附件能否通过云盘查看
|
|||
|
* @param imageFileId 附件id
|
|||
|
* @return 是否能够通过云盘查看文档
|
|||
|
*/
|
|||
|
public static boolean isEnableForImageFile(int imageFileId){
|
|||
|
boolean isEnableForImageFile=false;
|
|||
|
try {
|
|||
|
String tokenKey="";
|
|||
|
String storageStatus="";
|
|||
|
RecordSet rs=new RecordSet();
|
|||
|
rs.executeSql("select TokenKey,StorageStatus from ImageFile where imageFileId="+imageFileId);
|
|||
|
if(rs.next()){
|
|||
|
tokenKey=Util.null2String(rs.getString("TokenKey"));
|
|||
|
storageStatus=Util.null2String(rs.getString("StorageStatus"));
|
|||
|
}
|
|||
|
if(!tokenKey.equals("")&&storageStatus.equals("1")){
|
|||
|
isEnableForImageFile=true;
|
|||
|
}
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
return isEnableForImageFile;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 根据附件id获取tokenKey
|
|||
|
* @param imageFileId 附件id
|
|||
|
* @return tokenKey 注:storageStatus不为1时tokenKey为空
|
|||
|
*/
|
|||
|
public static String getTokenKeyByImageFileId(int imageFileId){
|
|||
|
String tokenKey="";
|
|||
|
try {
|
|||
|
String storageStatus="";
|
|||
|
RecordSet rs=new RecordSet();
|
|||
|
rs.executeSql("select TokenKey,StorageStatus from ImageFile where imageFileId="+imageFileId);
|
|||
|
if(rs.next()){
|
|||
|
tokenKey=Util.null2String(rs.getString("TokenKey"));
|
|||
|
storageStatus=Util.null2String(rs.getString("StorageStatus"));
|
|||
|
}
|
|||
|
if(!storageStatus.equals("1")){
|
|||
|
tokenKey="";
|
|||
|
}
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
return tokenKey;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断网址是否为内网地址
|
|||
|
* @param ipaddress
|
|||
|
* @return boolean true :是 false:否
|
|||
|
*/
|
|||
|
private static boolean checkIpInner(String ipaddress) {
|
|||
|
boolean checktmp = false;
|
|||
|
String isInner = Util.null2String(Prop.getPropValue("alioss","isInner"));
|
|||
|
if(isInner.equals("false")){
|
|||
|
return checktmp;
|
|||
|
}
|
|||
|
|
|||
|
ipaddress=Util.null2String(ipaddress);
|
|||
|
long ipNum = IpUtils.ip2number(ipaddress);
|
|||
|
long a1=IpUtils.ip2number("10.0.0.0");
|
|||
|
long a2=IpUtils.ip2number("10.255.255.255");
|
|||
|
long b1=IpUtils.ip2number("172.16.0.0");
|
|||
|
long b2=IpUtils.ip2number("172.31.255.255");
|
|||
|
long c1=IpUtils.ip2number("192.168.0.0");
|
|||
|
long c2=IpUtils.ip2number("192.168.255.255");
|
|||
|
|
|||
|
if(isInner(ipNum,a1,a2) || isInner(ipNum,b1,b2) || isInner(ipNum,c1,c2) || ipaddress.equals("127.0.0.1")){
|
|||
|
checktmp=true;
|
|||
|
}
|
|||
|
|
|||
|
return checktmp;
|
|||
|
}
|
|||
|
|
|||
|
private static boolean isInner(long userIp,long begin,long end){
|
|||
|
return (userIp>=begin) && (userIp<=end);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 判断当前用户是否通过Safari浏览器查看文档
|
|||
|
* @param req 页面请求信息
|
|||
|
* @return isEnableForDsp
|
|||
|
*/
|
|||
|
public static boolean isSafari(HttpServletRequest req){
|
|||
|
boolean isSafari=false;
|
|||
|
try {
|
|||
|
String userAgent=Util.null2String(req.getHeader("USER-AGENT"));
|
|||
|
if(userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") < 1 && userAgent.indexOf("Edge") < 1){
|
|||
|
isSafari=true;
|
|||
|
}
|
|||
|
|
|||
|
} catch (Exception ex) {
|
|||
|
}
|
|||
|
return isSafari;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 判断阿里云工具类能否正常加载
|
|||
|
* @return isexist
|
|||
|
*/
|
|||
|
public static boolean isexistAliOSSObjectUtil(){
|
|||
|
boolean isexist= true;
|
|||
|
try{
|
|||
|
Class.forName("weaver.alioss.AliOSSObjectUtil");
|
|||
|
}catch(ExceptionInInitializerError e){
|
|||
|
isexist = false; //判断云存储是否正常
|
|||
|
}catch(IllegalArgumentException e){
|
|||
|
isexist = false; //判断云存储是否正常
|
|||
|
}catch(NoClassDefFoundError e){
|
|||
|
isexist = false; //判断云存储是否正常
|
|||
|
}catch(Exception e){
|
|||
|
isexist = false; //判断云存储是否正常
|
|||
|
}
|
|||
|
return isexist;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断是否将数据流传输到服务器再下载
|
|||
|
*
|
|||
|
* @return isexist
|
|||
|
*/
|
|||
|
public static boolean isAliOSSToServer(String comefrom){
|
|||
|
boolean isAliOSSToServer= false;
|
|||
|
if(comefrom==null||comefrom.trim().equals("")){
|
|||
|
return isAliOSSToServer;
|
|||
|
}
|
|||
|
try{
|
|||
|
//判断阿里云工具类能否正常加载
|
|||
|
if(!isexistAliOSSObjectUtil()){
|
|||
|
return isAliOSSToServer;
|
|||
|
}
|
|||
|
//判断是否启用了阿里云
|
|||
|
if(!AliOSSObjectUtil.isEnable()){
|
|||
|
return isAliOSSToServer;
|
|||
|
}
|
|||
|
|
|||
|
//判断是否配置的是阿里云的内网地址
|
|||
|
if(AliOSSObjectUtil.getAliossServerAddress().contains("internal.aliyuncs")){
|
|||
|
isAliOSSToServer = true;
|
|||
|
}
|
|||
|
|
|||
|
String AliOSSToServerComeFrom = Util.null2String(Prop.getPropValue("alioss","AliOSSToServerComeFrom"));
|
|||
|
if(AliOSSToServerComeFrom.trim().equals("")){
|
|||
|
AliOSSToServerComeFrom="WorkflowToDoc";
|
|||
|
}
|
|||
|
if((","+AliOSSToServerComeFrom+",").indexOf(","+comefrom+",")>=0){
|
|||
|
isAliOSSToServer=true;
|
|||
|
}
|
|||
|
|
|||
|
}catch(Exception e){
|
|||
|
isAliOSSToServer = false; //判断云存储是否正常
|
|||
|
}
|
|||
|
return isAliOSSToServer;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 判断是否仅启用阿里云
|
|||
|
*
|
|||
|
* @return true:
|
|||
|
*/
|
|||
|
public static boolean isonlyAliOSS(){
|
|||
|
boolean isonlyAliOSS= false;
|
|||
|
|
|||
|
try{
|
|||
|
//判断阿里云工具类能否正常加载
|
|||
|
if(!isexistAliOSSObjectUtil()){
|
|||
|
return isonlyAliOSS;
|
|||
|
}
|
|||
|
//判断是否启用了阿里云
|
|||
|
if(!AliOSSObjectUtil.isEnable()){
|
|||
|
return isonlyAliOSS;
|
|||
|
}
|
|||
|
|
|||
|
String onlyAliOSS = Util.null2String(Prop.getPropValue("alioss","onlyAliOSS"));
|
|||
|
if(onlyAliOSS.trim().equals("1")){
|
|||
|
isonlyAliOSS=true;
|
|||
|
}
|
|||
|
}catch(Exception e){
|
|||
|
isonlyAliOSS = false; //判断云存储是否正常
|
|||
|
}
|
|||
|
return isonlyAliOSS;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 是否启用阿里云oss服务
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static boolean isEnable(){
|
|||
|
boolean isEnable=false;
|
|||
|
//判断阿里云工具类能否正常加载
|
|||
|
if(!isexistAliOSSObjectUtil()){
|
|||
|
return isEnable;
|
|||
|
}
|
|||
|
isEnable=Prop.getPropValue("alioss","status").equalsIgnoreCase("1");
|
|||
|
return isEnable;
|
|||
|
}
|
|||
|
|
|||
|
}
|