Commit 391cbb85 by songxiang

胡老板的需求改的方法

parent 1cbb0669
package com.pcloud.common.utils.aliyun; package com.pcloud.common.utils.aliyun;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -50,41 +63,28 @@ import com.pcloud.common.utils.rsa.MD5; ...@@ -50,41 +63,28 @@ import com.pcloud.common.utils.rsa.MD5;
import com.pcloud.common.utils.string.StringTools; import com.pcloud.common.utils.string.StringTools;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
/** /**
* @描述: * @描述:
* @作者:songx * @作者:songx
* @创建时间:2017年6月26日,下午12:03:44 @版本:1.0 * @创建时间:2017年6月26日,下午12:03:44 @版本:1.0
*/ */
public class OssUtils { public class OssUtils {
/** /**
* logger * logger
*/ */
private static final Logger LOGGER = LoggerFactory.getLogger(OssUtils.class); private static final Logger LOGGER = LoggerFactory.getLogger(OssUtils.class);
/** /**
* ACS客户端,华东地区 * ACS客户端,华东地区
*/ */
private static DefaultAcsClient acsClient; private static DefaultAcsClient acsClient;
/** /**
* ACS客户端,华北地区 * ACS客户端,华北地区
*/ */
private static DefaultAcsClient acsClientBj; private static DefaultAcsClient acsClientBj;
/** /**
* 获取ACS客户端 * 获取ACS客户端
* *
...@@ -96,13 +96,13 @@ public class OssUtils { ...@@ -96,13 +96,13 @@ public class OssUtils {
String mtsRegion = AliyunConstant.getMtsRegion(bucketName); String mtsRegion = AliyunConstant.getMtsRegion(bucketName);
DefaultProfile.addEndpoint(mtsRegion, mtsRegion, "Mts", AliyunConstant.getMtsEndPoint(bucketName)); DefaultProfile.addEndpoint(mtsRegion, mtsRegion, "Mts", AliyunConstant.getMtsEndPoint(bucketName));
return new DefaultAcsClient(DefaultProfile.getProfile(mtsRegion, AliyunConstant.MAIN_ACCESS_KEY_ID, return new DefaultAcsClient(DefaultProfile.getProfile(mtsRegion, AliyunConstant.MAIN_ACCESS_KEY_ID,
AliyunConstant.MAIN_ACCESS_KEY_SECRET)); AliyunConstant.MAIN_ACCESS_KEY_SECRET));
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("【aliOSS】初始化媒体转码ACS客户端失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】初始化媒体转码ACS客户端失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_READ_FAILURE, "初始化Acs客户端失败"); throw new FileException(FileException.FILE_READ_FAILURE, "初始化Acs客户端失败");
} }
} }
/** /**
* 获取ACS客户端 * 获取ACS客户端
* *
...@@ -122,7 +122,7 @@ public class OssUtils { ...@@ -122,7 +122,7 @@ public class OssUtils {
return acsClient; return acsClient;
} }
} }
/** /**
* 本地上传文件到aliOSS,isFlag=true,表示上传成功 * 本地上传文件到aliOSS,isFlag=true,表示上传成功
* *
...@@ -134,7 +134,7 @@ public class OssUtils { ...@@ -134,7 +134,7 @@ public class OssUtils {
public static UploadResultInfo uploadLocalFile(String filePath, String fileName) throws FileException { public static UploadResultInfo uploadLocalFile(String filePath, String fileName) throws FileException {
return uploadLocalFile4CustomName(filePath, null); return uploadLocalFile4CustomName(filePath, null);
} }
/** /**
* 本地上传文件到aliOSS,isFlag=true,表示上传成功 <br> 自定义上传后的文件名称 * 本地上传文件到aliOSS,isFlag=true,表示上传成功 <br> 自定义上传后的文件名称
* *
...@@ -148,18 +148,18 @@ public class OssUtils { ...@@ -148,18 +148,18 @@ public class OssUtils {
String outObjectKey = getOutObjectKey(AliyunEnum.UPLOAD, fileName, fileType); String outObjectKey = getOutObjectKey(AliyunEnum.UPLOAD, fileName, fileType);
uploadPointFile2OSS(filePath, AliyunConstant.FILE_BUCKET, outObjectKey); uploadPointFile2OSS(filePath, AliyunConstant.FILE_BUCKET, outObjectKey);
UploadResultInfo uploadResultInfo = getResultInfo(outObjectKey, new File(filePath).length(), null, UploadResultInfo uploadResultInfo = getResultInfo(outObjectKey, new File(filePath).length(), null,
AliyunConstant.FILE_BUCKET); AliyunConstant.FILE_BUCKET);
// 如果上传的是图片转换成webp // 如果上传的是图片转换成webp
// if (uploadResultInfo != null && FileTypeUtils.equalsGatherName(fileType, FileTypeUtils.IMAGE)) { // if (uploadResultInfo != null && FileTypeUtils.equalsGatherName(fileType, FileTypeUtils.IMAGE)) {
// ImageUtils.toWebp(uploadResultInfo.getUrl()); // ImageUtils.toWebp(uploadResultInfo.getUrl());
// } // }
return uploadResultInfo; return uploadResultInfo;
} }
/** /**
* 父子文件上传,子文件全路径和父文件相同,文件后缀类型自定义 * 父子文件上传,子文件全路径和父文件相同,文件后缀类型自定义
* *
* @param filePath 子文件本地路径 * @param filePath 子文件本地路径
* @param parentFileUrl 仅限OSS的全路径,其他本地文件路径均不支持 * @param parentFileUrl 仅限OSS的全路径,其他本地文件路径均不支持
* @return * @return
* @throws FileException * @throws FileException
...@@ -170,11 +170,11 @@ public class OssUtils { ...@@ -170,11 +170,11 @@ public class OssUtils {
uploadPointFile2OSS(filePath, AliyunConstant.FILE_BUCKET, outObjectKey); uploadPointFile2OSS(filePath, AliyunConstant.FILE_BUCKET, outObjectKey);
return getResultInfo(outObjectKey, new File(filePath).length(), null, AliyunConstant.FILE_BUCKET); return getResultInfo(outObjectKey, new File(filePath).length(), null, AliyunConstant.FILE_BUCKET);
} }
/** /**
* byte[]数组文件流上传 ,isFlag=true,表示上传成功 * byte[]数组文件流上传 ,isFlag=true,表示上传成功
* *
* @param buff 源文件字节数组 * @param buff 源文件字节数组
* @param fileName 源文件名称不带后缀,可为null * @param fileName 源文件名称不带后缀,可为null
* @param fileType 源文件后缀 * @param fileType 源文件后缀
* @return * @return
...@@ -183,18 +183,18 @@ public class OssUtils { ...@@ -183,18 +183,18 @@ public class OssUtils {
public static UploadResultInfo uploadFileByte(byte[] buff, String fileName, String fileType) throws FileException { public static UploadResultInfo uploadFileByte(byte[] buff, String fileName, String fileType) throws FileException {
return uploadFileStream(new ByteArrayInputStream(buff), fileName, fileType); return uploadFileStream(new ByteArrayInputStream(buff), fileName, fileType);
} }
/** /**
* 文件流上传到aliOSS, isFlag=true,表示上传成功 <br/> 慎用,该方法稳定性不确定,曾出现过上传的文件流丢失的情况 * 文件流上传到aliOSS, isFlag=true,表示上传成功 <br/> 慎用,该方法稳定性不确定,曾出现过上传的文件流丢失的情况
* *
* @param is 源文件流 * @param is 源文件流
* @param fileName 源文件名称不带后缀,可为null * @param fileName 源文件名称不带后缀,可为null
* @param fileType 源文件后缀 * @param fileType 源文件后缀
* @return * @return
* @throws FileException * @throws FileException
*/ */
public static UploadResultInfo uploadFileStream(InputStream is, String fileName, String fileType) public static UploadResultInfo uploadFileStream(InputStream is, String fileName, String fileType)
throws FileException { throws FileException {
String outObjectKey = getOutObjectKey(AliyunEnum.UPLOAD, null, fileType); String outObjectKey = getOutObjectKey(AliyunEnum.UPLOAD, null, fileType);
uploadFileStream2OSS(is, AliyunConstant.FILE_BUCKET, outObjectKey); uploadFileStream2OSS(is, AliyunConstant.FILE_BUCKET, outObjectKey);
UploadResultInfo uploadResultInfo = getResultInfo(outObjectKey, null, null, AliyunConstant.FILE_BUCKET); UploadResultInfo uploadResultInfo = getResultInfo(outObjectKey, null, null, AliyunConstant.FILE_BUCKET);
...@@ -204,7 +204,7 @@ public class OssUtils { ...@@ -204,7 +204,7 @@ public class OssUtils {
// } // }
return uploadResultInfo; return uploadResultInfo;
} }
/** /**
* 文件流上传到aliOSS * 文件流上传到aliOSS
* *
...@@ -215,7 +215,7 @@ public class OssUtils { ...@@ -215,7 +215,7 @@ public class OssUtils {
* @throws FileException * @throws FileException
*/ */
private static OSSFileDO uploadFileStream2OSS(InputStream is, String bucketName, String objectKey) private static OSSFileDO uploadFileStream2OSS(InputStream is, String bucketName, String objectKey)
throws FileException { throws FileException {
if (is == null) { if (is == null) {
throw new FileException(FileException.FILE_CONTENT_NOT_EXIST, "InputStream is null!"); throw new FileException(FileException.FILE_CONTENT_NOT_EXIST, "InputStream is null!");
} }
...@@ -224,7 +224,7 @@ public class OssUtils { ...@@ -224,7 +224,7 @@ public class OssUtils {
try { try {
client.putObject(bucketName, objectKey, is); client.putObject(bucketName, objectKey, is);
ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(bucketName), bucketName, ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(bucketName), bucketName,
URLEncoder.encode(objectKey, "utf-8")); URLEncoder.encode(objectKey, "utf-8"));
is.close(); is.close();
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("【aliOSS】上传文件失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】上传文件失败:" + e.getMessage(), e);
...@@ -234,7 +234,7 @@ public class OssUtils { ...@@ -234,7 +234,7 @@ public class OssUtils {
} }
return ossFileDO; return ossFileDO;
} }
/** /**
* 断点续传上传文件到aliOSS * 断点续传上传文件到aliOSS
* *
...@@ -244,7 +244,7 @@ public class OssUtils { ...@@ -244,7 +244,7 @@ public class OssUtils {
* @return * @return
*/ */
private static OSSFileDO uploadPointFile2OSS(String filePath, String bucketName, String objectKey) private static OSSFileDO uploadPointFile2OSS(String filePath, String bucketName, String objectKey)
throws FileException { throws FileException {
if (filePath == null) { if (filePath == null) {
throw new RuntimeException("filePath is null!"); throw new RuntimeException("filePath is null!");
} }
...@@ -264,7 +264,7 @@ public class OssUtils { ...@@ -264,7 +264,7 @@ public class OssUtils {
// 断点续传上传 // 断点续传上传
ossClient.uploadFile(uploadFileRequest); ossClient.uploadFile(uploadFileRequest);
ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(bucketName), bucketName, ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(bucketName), bucketName,
URLEncoder.encode(objectKey, "utf-8")); URLEncoder.encode(objectKey, "utf-8"));
} catch (Throwable e) { } catch (Throwable e) {
LOGGER.error("【aliOSS】上传文件失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】上传文件失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_UPLOAD_FAILURE, "上传文件失败"); throw new FileException(FileException.FILE_UPLOAD_FAILURE, "上传文件失败");
...@@ -273,7 +273,7 @@ public class OssUtils { ...@@ -273,7 +273,7 @@ public class OssUtils {
} }
return ossFileDO; return ossFileDO;
} }
/** /**
* 提交MP4转码作业 * 提交MP4转码作业
* *
...@@ -286,7 +286,7 @@ public class OssUtils { ...@@ -286,7 +286,7 @@ public class OssUtils {
String[] result = submitTranscodeJobMp4Ex(fileName, filePath); String[] result = submitTranscodeJobMp4Ex(fileName, filePath);
return result[0]; return result[0];
} }
/** /**
* 提交MP4转码作业 * 提交MP4转码作业
* *
...@@ -304,11 +304,11 @@ public class OssUtils { ...@@ -304,11 +304,11 @@ public class OssUtils {
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp4"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp4");
return transcodeJob(ossFileDO, AliyunConstant.getMp4TemplateId(inputBucketName), outObjectKey, null, null); return transcodeJob(ossFileDO, AliyunConstant.getMp4TemplateId(inputBucketName), outObjectKey, null, null);
} }
/** /**
* 提交MP4转码作业,文件流方式 * 提交MP4转码作业,文件流方式
* *
* @param buff 源文件流 * @param buff 源文件流
* @param fileName 源文件的名称不带后缀,可为null * @param fileName 源文件的名称不带后缀,可为null
* @param fileType 源文件的后缀 * @param fileType 源文件的后缀
* @return * @return
...@@ -320,10 +320,10 @@ public class OssUtils { ...@@ -320,10 +320,10 @@ public class OssUtils {
OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), inputBucketName, inObjectKey); OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), inputBucketName, inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp4"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp4");
String[] result = transcodeJob(inputFile, AliyunConstant.getMp4TemplateId(inputBucketName), outObjectKey, null, String[] result = transcodeJob(inputFile, AliyunConstant.getMp4TemplateId(inputBucketName), outObjectKey, null,
null); null);
return result[0]; return result[0];
} }
/** /**
* 提交MP3转码作业 * 提交MP3转码作业
* *
...@@ -336,7 +336,7 @@ public class OssUtils { ...@@ -336,7 +336,7 @@ public class OssUtils {
String[] result = submitTranscodeJobMp3Ex(fileName, filePath); String[] result = submitTranscodeJobMp3Ex(fileName, filePath);
return result[0]; return result[0];
} }
/** /**
* 提交MP3转码作业 * 提交MP3转码作业
* *
...@@ -354,11 +354,11 @@ public class OssUtils { ...@@ -354,11 +354,11 @@ public class OssUtils {
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3");
return transcodeJob(ossFileDO, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null, null); return transcodeJob(ossFileDO, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null, null);
} }
/** /**
* 提交MP3转码作业,文件流方式 <br/> 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败 * 提交MP3转码作业,文件流方式 <br/> 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败
* *
* @param is 源文件流 * @param is 源文件流
* @param fileName 源文件的名称不带后缀,可为null * @param fileName 源文件的名称不带后缀,可为null
* @param fileType 源文件的后缀 * @param fileType 源文件的后缀
* @return * @return
...@@ -370,14 +370,14 @@ public class OssUtils { ...@@ -370,14 +370,14 @@ public class OssUtils {
OSSFileDO inputFile = uploadFileStream2OSS(is, inputBucketName, inObjectKey); OSSFileDO inputFile = uploadFileStream2OSS(is, inputBucketName, inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3");
String[] result = transcodeJob(inputFile, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null, String[] result = transcodeJob(inputFile, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null,
null); null);
return result[0]; return result[0];
} }
/** /**
* 提交MP3转码作业 * 提交MP3转码作业
* *
* @param buff 文件 * @param buff 文件
* @param fileName 源文件的名称不带后缀,可为null * @param fileName 源文件的名称不带后缀,可为null
* @param fileType 上传的文件后缀 * @param fileType 上传的文件后缀
* @return * @return
...@@ -390,10 +390,10 @@ public class OssUtils { ...@@ -390,10 +390,10 @@ public class OssUtils {
OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), inputBucketName, inObjectKey); OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), inputBucketName, inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, null, "mp3");
String[] result = transcodeJob(inputFile, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null, String[] result = transcodeJob(inputFile, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null,
null); null);
return result[0]; return result[0];
} }
/** /**
* 转码作业,同步的方式 * 转码作业,同步的方式
* *
...@@ -406,7 +406,7 @@ public class OssUtils { ...@@ -406,7 +406,7 @@ public class OssUtils {
String jobId = transcodeJob(null, fileUrl); String jobId = transcodeJob(null, fileUrl);
return transcodeJobResultSync(jobId, bucketName); return transcodeJobResultSync(jobId, bucketName);
} }
/** /**
* 转码作业 * 转码作业
* *
...@@ -419,18 +419,18 @@ public class OssUtils { ...@@ -419,18 +419,18 @@ public class OssUtils {
String[] result = transcodeJobEx(fileName, filePath, null, null); String[] result = transcodeJobEx(fileName, filePath, null, null);
return result[0]; return result[0];
} }
/** /**
* 转码作业 * 转码作业
* *
* @param fileName * @param fileName
* @param fileUrl 文件地址 * @param fileUrl 文件地址
* @param outFileType 输出文件类型 * @param outFileType 输出文件类型
* @param waterMarkContent 视频水印文本,如果不需要水印传null * @param waterMarkContent 视频水印文本,如果不需要水印传null
* @return [0]:jobId,[1]:转码后的地址 * @return [0]:jobId,[1]:转码后的地址
*/ */
public static String[] transcodeJobEx(String fileName, String fileUrl, String outFileType, public static String[] transcodeJobEx(String fileName, String fileUrl, String outFileType,
String waterMarkContent) { String waterMarkContent) {
String fileType = FileUtils.getFileType(fileUrl); String fileType = FileUtils.getFileType(fileUrl);
if (StringTools.contains(fileUrl, AliyunConstant.OSS_CDN_URLS)) { if (StringTools.contains(fileUrl, AliyunConstant.OSS_CDN_URLS)) {
return transcodeJobExistOSS(fileUrl, fileName, fileType, outFileType, waterMarkContent); return transcodeJobExistOSS(fileUrl, fileName, fileType, outFileType, waterMarkContent);
...@@ -438,7 +438,7 @@ public class OssUtils { ...@@ -438,7 +438,7 @@ public class OssUtils {
return transcodeJobNotExistOSS(fileUrl, fileName, fileType); return transcodeJobNotExistOSS(fileUrl, fileName, fileType);
} }
} }
/** /**
* 已经存在于OSS中的文件转码 * 已经存在于OSS中的文件转码
* *
...@@ -450,7 +450,7 @@ public class OssUtils { ...@@ -450,7 +450,7 @@ public class OssUtils {
* @return * @return
*/ */
private static String[] transcodeJobExistOSS(String fileUrl, String fileName, String fileType, String outFileType, private static String[] transcodeJobExistOSS(String fileUrl, String fileName, String fileType, String outFileType,
String waterMarkContent) { String waterMarkContent) {
LOGGER.info("【aliOSS】已经存在于OSS中的文件转码.<START>.[fileUrl]=" + fileUrl + ",[outFileType]=" + outFileType); LOGGER.info("【aliOSS】已经存在于OSS中的文件转码.<START>.[fileUrl]=" + fileUrl + ",[outFileType]=" + outFileType);
String[] result = null; String[] result = null;
String inObjectKey = splitObjectKey(fileUrl); String inObjectKey = splitObjectKey(fileUrl);
...@@ -462,15 +462,15 @@ public class OssUtils { ...@@ -462,15 +462,15 @@ public class OssUtils {
// 组装水印参数 // 组装水印参数
JSONArray waterMarkConfigArray = getWaterMarkConfig(waterMarkContent); JSONArray waterMarkConfigArray = getWaterMarkConfig(waterMarkContent);
result = transcodeJob(ossFileDO, AliyunConstant.getVideoTemplateId(inputBucketName, outFileType), result = transcodeJob(ossFileDO, AliyunConstant.getVideoTemplateId(inputBucketName, outFileType),
outObjectKey, waterMarkConfigArray, null); outObjectKey, waterMarkConfigArray, null);
} else if (FileUtils.AUDIO.equals(FileUtils.getGatherName(fileType))) { } else if (FileUtils.AUDIO.equals(FileUtils.getGatherName(fileType))) {
String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, fileName, "mp3"); String outObjectKey = getOutObjectKey(AliyunEnum.TRANSCODE, fileName, "mp3");
result = transcodeJob(ossFileDO, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null, result = transcodeJob(ossFileDO, AliyunConstant.getMp3TemplateId(inputBucketName), outObjectKey, null,
null); null);
} }
return result; return result;
} }
/** /**
* 不存在于OSS中的文件转码,要先上传 * 不存在于OSS中的文件转码,要先上传
* *
...@@ -488,7 +488,7 @@ public class OssUtils { ...@@ -488,7 +488,7 @@ public class OssUtils {
} }
return null; return null;
} }
/** /**
* 获取文件所在的BUCKET名称 * 获取文件所在的BUCKET名称
* *
...@@ -502,11 +502,11 @@ public class OssUtils { ...@@ -502,11 +502,11 @@ public class OssUtils {
} }
return inputBucketName; return inputBucketName;
} }
/** /**
* 文件合并,异步方法 * 文件合并,异步方法
* *
* @param fileUrl 主文件地址 * @param fileUrl 主文件地址
* @param mergeUrls 需要合并的子文件列表,最多支持4个 * @param mergeUrls 需要合并的子文件列表,最多支持4个
* @return * @return
* @throws FileException * @throws FileException
...@@ -530,16 +530,16 @@ public class OssUtils { ...@@ -530,16 +530,16 @@ public class OssUtils {
} }
String outObjectKey = getOutObjectKey(AliyunEnum.MERGE, null, fileType); String outObjectKey = getOutObjectKey(AliyunEnum.MERGE, null, fileType);
String templateId = "mp3".equals(fileType) ? AliyunConstant.getMp3TemplateId(inputBucketName) String templateId = "mp3".equals(fileType) ? AliyunConstant.getMp3TemplateId(inputBucketName)
: AliyunConstant.getMp4TemplateId(inputBucketName); : AliyunConstant.getMp4TemplateId(inputBucketName);
String[] result = transcodeJob(ossFileDO, templateId, outObjectKey, null, mergeUrls); String[] result = transcodeJob(ossFileDO, templateId, outObjectKey, null, mergeUrls);
LOGGER.info("【aliOSS】提交合并作业.<END>.[result]=" + JSON.toJSONString(result)); LOGGER.info("【aliOSS】提交合并作业.<END>.[result]=" + JSON.toJSONString(result));
return result[0]; return result[0];
} }
/** /**
* 视频文件合并,同步方法 * 视频文件合并,同步方法
* *
* @param fileUrl 主文件地址 * @param fileUrl 主文件地址
* @param mergeUrls 需要合并的子文件列表,最多支持4个 * @param mergeUrls 需要合并的子文件列表,最多支持4个
* @return * @return
* @throws FileException * @throws FileException
...@@ -549,11 +549,11 @@ public class OssUtils { ...@@ -549,11 +549,11 @@ public class OssUtils {
String jobId = submitMergeJob(fileUrl, mergeUrls); String jobId = submitMergeJob(fileUrl, mergeUrls);
return transcodeJobResultSync(jobId, bucketName); return transcodeJobResultSync(jobId, bucketName);
} }
/** /**
* 视频文件合并,同步方法 * 视频文件合并,同步方法
* *
* @param fileUrl 主文件地址 * @param fileUrl 主文件地址
* @param mergeUrls 需要合并的子文件列表,最多支持4个 * @param mergeUrls 需要合并的子文件列表,最多支持4个
* @return * @return
* @throws FileException * @throws FileException
...@@ -563,7 +563,7 @@ public class OssUtils { ...@@ -563,7 +563,7 @@ public class OssUtils {
String jobId = submitMergeJob(fileUrl, mergeUrls); String jobId = submitMergeJob(fileUrl, mergeUrls);
return transcodeJobResultSync(jobId, bucketName); return transcodeJobResultSync(jobId, bucketName);
} }
/** /**
* 同步的方式获取转码后的结果 * 同步的方式获取转码后的结果
* *
...@@ -592,19 +592,19 @@ public class OssUtils { ...@@ -592,19 +592,19 @@ public class OssUtils {
total += 3; total += 3;
} }
} }
/** /**
* 转码作业 * 转码作业
* *
* @param inputFile 输入文件 * @param inputFile 输入文件
* @param templateId 转码模板 * @param templateId 转码模板
* @param outObjectKey 转码输出对象地址 * @param outObjectKey 转码输出对象地址
* @param waterMarkConfigArray 水印参数 * @param waterMarkConfigArray 水印参数
* @return * @return
* @throws FileException * @throws FileException
*/ */
private static String[] transcodeJob(OSSFileDO inputFile, String templateId, String outObjectKey, private static String[] transcodeJob(OSSFileDO inputFile, String templateId, String outObjectKey,
JSONArray waterMarkConfigArray, List<String> mergeUrls) throws FileException { JSONArray waterMarkConfigArray, List<String> mergeUrls) throws FileException {
try { try {
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8"); outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
...@@ -643,7 +643,7 @@ public class OssUtils { ...@@ -643,7 +643,7 @@ public class OssUtils {
throw new RuntimeException("SubmitJobsRequest Size failed"); throw new RuntimeException("SubmitJobsRequest Size failed");
} }
com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult.Job job = response.getJobResultList().get(0) com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult.Job job = response.getJobResultList().get(0)
.getJob(); .getJob();
result[0] = job.getJobId(); result[0] = job.getJobId();
result[1] = getOSSUrl(URLDecoder.decode(outObjectKey, "utf-8"), outputBucketName); result[1] = getOSSUrl(URLDecoder.decode(outObjectKey, "utf-8"), outputBucketName);
} catch (Exception e) { } catch (Exception e) {
...@@ -652,7 +652,7 @@ public class OssUtils { ...@@ -652,7 +652,7 @@ public class OssUtils {
} }
return result; return result;
} }
/** /**
* 组装视频合并参数 * 组装视频合并参数
* *
...@@ -686,7 +686,7 @@ public class OssUtils { ...@@ -686,7 +686,7 @@ public class OssUtils {
mergeInput.put("MergeList", mergeJsons); mergeInput.put("MergeList", mergeJsons);
return mergeJsons; return mergeJsons;
} }
/** /**
* 组装视频水印参数 * 组装视频水印参数
* *
...@@ -710,19 +710,19 @@ public class OssUtils { ...@@ -710,19 +710,19 @@ public class OssUtils {
waterMarkConfigArray.add(waterMarkConfig); waterMarkConfigArray.add(waterMarkConfig);
return waterMarkConfigArray; return waterMarkConfigArray;
} }
/** /**
* 提交视频剪切作业 * 提交视频剪切作业
* *
* @param fileName * @param fileName
* @param fileUrl * @param fileUrl
* @param seek 开始时间:[0.000,86399.999] * @param seek 开始时间:[0.000,86399.999]
* @param duration 持续时长 [0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
public static String submitClipJob(String fileName, String fileUrl, String seek, String duration) public static String submitClipJob(String fileName, String fileUrl, String seek, String duration)
throws FileException { throws FileException {
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileUrl]=" + fileUrl + ",[seek]=" + seek + ",[duration]=" + duration); LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileUrl]=" + fileUrl + ",[seek]=" + seek + ",[duration]=" + duration);
if (StringUtil.isEmpty(duration)) { if (StringUtil.isEmpty(duration)) {
return null; return null;
...@@ -737,7 +737,7 @@ public class OssUtils { ...@@ -737,7 +737,7 @@ public class OssUtils {
if (StringTools.contains(fileUrl, AliyunConstant.OSS_CDN_URLS)) { if (StringTools.contains(fileUrl, AliyunConstant.OSS_CDN_URLS)) {
String inObjectKey = splitObjectKey(fileUrl); String inObjectKey = splitObjectKey(fileUrl);
String inBucketName = fileUrlExist001(fileUrl) ? AliyunConstant.INPUT_BUCKET String inBucketName = fileUrlExist001(fileUrl) ? AliyunConstant.INPUT_BUCKET
: AliyunConstant.getBucketName(fileUrl); : AliyunConstant.getBucketName(fileUrl);
OSSFileDO ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(inBucketName), inBucketName, inObjectKey); OSSFileDO ossFileDO = new OSSFileDO(AliyunConstant.getOssRegion(inBucketName), inBucketName, inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, outFileType); String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, outFileType);
resultFileUrl = clipJob(ossFileDO, outObjectKey, seek, duration); resultFileUrl = clipJob(ossFileDO, outObjectKey, seek, duration);
...@@ -750,43 +750,43 @@ public class OssUtils { ...@@ -750,43 +750,43 @@ public class OssUtils {
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl); LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
return resultFileUrl; return resultFileUrl;
} }
/** /**
* 提交视频剪切作业 * 提交视频剪切作业
* *
* @param buff * @param buff
* @param fileName * @param fileName
* @param fileType * @param fileType
* @param seek 开始时间:[0.000,86399.999] * @param seek 开始时间:[0.000,86399.999]
* @param duration 持续时长 [0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
public static String submitClipJob(byte[] buff, String fileName, String fileType, String seek, String duration) public static String submitClipJob(byte[] buff, String fileName, String fileType, String seek, String duration)
throws FileException { throws FileException {
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileName]=" + fileName + ",[seek]=" + seek + ",[duration]=" + duration); LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileName]=" + fileName + ",[seek]=" + seek + ",[duration]=" + duration);
fileName = MD5.getMD5StrLower(fileName); fileName = MD5.getMD5StrLower(fileName);
String inObjectKey = getInObjectKey(AliyunEnum.CUT, fileName, fileType); String inObjectKey = getInObjectKey(AliyunEnum.CUT, fileName, fileType);
OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), AliyunConstant.FILE_BUCKET, OSSFileDO inputFile = uploadFileStream2OSS(new ByteArrayInputStream(buff), AliyunConstant.FILE_BUCKET,
inObjectKey); inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, "mp4"); String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, "mp4");
String resultFileUrl = clipJob(inputFile, outObjectKey, seek, duration); String resultFileUrl = clipJob(inputFile, outObjectKey, seek, duration);
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl); LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
return resultFileUrl; return resultFileUrl;
} }
/** /**
* 视频剪切作业 * 视频剪切作业
* *
* @param inputFile * @param inputFile
* @param outObjectKey * @param outObjectKey
* @param seek 开始时间:[0.000,86399.999] * @param seek 开始时间:[0.000,86399.999]
* @param duration 持续时长 [0.000,86399.999] * @param duration 持续时长 [0.000,86399.999]
* @return * @return
* @throws FileException * @throws FileException
*/ */
private static String clipJob(OSSFileDO inputFile, String outObjectKey, String seek, String duration) private static String clipJob(OSSFileDO inputFile, String outObjectKey, String seek, String duration)
throws FileException { throws FileException {
try { try {
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8"); outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
...@@ -810,7 +810,7 @@ public class OssUtils { ...@@ -810,7 +810,7 @@ public class OssUtils {
request.setPipelineId(AliyunConstant.getPipelineId(inputBucketName)); request.setPipelineId(AliyunConstant.getPipelineId(inputBucketName));
request.setOutputLocation(AliyunConstant.getOssRegion(inputBucketName)); request.setOutputLocation(AliyunConstant.getOssRegion(inputBucketName));
Integer outputJobCount = 1; Integer outputJobCount = 1;
String object = null; String object = null;
try { try {
SubmitJobsResponse response = getAcsClient(inputBucketName).getAcsResponse(request); SubmitJobsResponse response = getAcsClient(inputBucketName).getAcsResponse(request);
...@@ -824,11 +824,11 @@ public class OssUtils { ...@@ -824,11 +824,11 @@ public class OssUtils {
} }
return getOSSUrl(object, outputBucketName); return getOSSUrl(object, outputBucketName);
} }
/** /**
* 组装剪切参数 * 组装剪切参数
* *
* @param seek 开始时间:sssss[.SSS] * @param seek 开始时间:sssss[.SSS]
* @param duration 持续时长 sssss[.SSS] * @param duration 持续时长 sssss[.SSS]
* @return * @return
*/ */
...@@ -842,12 +842,12 @@ public class OssUtils { ...@@ -842,12 +842,12 @@ public class OssUtils {
LOGGER.info("【aliOSS】组装剪切参数.<END>"); LOGGER.info("【aliOSS】组装剪切参数.<END>");
return timeSpanObject; return timeSpanObject;
} }
/** /**
* 提交视频截图任务,成功返回图片地址 <br> * 提交视频截图任务,成功返回图片地址 <br>
* *
* @param fileUrl * @param fileUrl
* @param time * @param time 秒
* @return 成功:图片地址,失败:null * @return 成功:图片地址,失败:null
*/ */
public static String submitSnapshotJob(String fileUrl, int time) { public static String submitSnapshotJob(String fileUrl, int time) {
...@@ -871,7 +871,7 @@ public class OssUtils { ...@@ -871,7 +871,7 @@ public class OssUtils {
SnapshotJob snapshotJob = getAcsClient(inputBucketName).getAcsResponse(request).getSnapshotJob(); SnapshotJob snapshotJob = getAcsClient(inputBucketName).getAcsResponse(request).getSnapshotJob();
if ("Success".equalsIgnoreCase(snapshotJob.getState())) { if ("Success".equalsIgnoreCase(snapshotJob.getState())) {
String outObject = URLDecoder.decode(snapshotJob.getSnapshotConfig().getOutputFile().getObject(), String outObject = URLDecoder.decode(snapshotJob.getSnapshotConfig().getOutputFile().getObject(),
"UTF-8"); "UTF-8");
return getOSSUrl(outObject, outputBucketName); return getOSSUrl(outObject, outputBucketName);
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -879,7 +879,7 @@ public class OssUtils { ...@@ -879,7 +879,7 @@ public class OssUtils {
} }
return null; return null;
} }
/** /**
* 组装截图参数 * 组装截图参数
* *
...@@ -898,7 +898,7 @@ public class OssUtils { ...@@ -898,7 +898,7 @@ public class OssUtils {
snapshotConfig.put("FrameType", "normal"); snapshotConfig.put("FrameType", "normal");
return snapshotConfig; return snapshotConfig;
} }
/** /**
* 组装截图参数 * 组装截图参数
* *
...@@ -913,7 +913,7 @@ public class OssUtils { ...@@ -913,7 +913,7 @@ public class OssUtils {
input.put("Object", inputObject); input.put("Object", inputObject);
return input; return input;
} }
/** /**
* 组装转换后的地址(华东地区) * 组装转换后的地址(华东地区)
* *
...@@ -924,7 +924,7 @@ public class OssUtils { ...@@ -924,7 +924,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】组装转换后的地址(华东地区),<START>.[transcodeJobId]=" + transcodeJobId); LOGGER.info("【aliOSS】组装转换后的地址(华东地区),<START>.[transcodeJobId]=" + transcodeJobId);
return getOSSResult(transcodeJobId, AliyunConstant.FILE_BUCKET); return getOSSResult(transcodeJobId, AliyunConstant.FILE_BUCKET);
} }
/** /**
* 组装转换后的地址,根据BUCKETNAME * 组装转换后的地址,根据BUCKETNAME
* *
...@@ -933,13 +933,14 @@ public class OssUtils { ...@@ -933,13 +933,14 @@ public class OssUtils {
* @throws FileException * @throws FileException
*/ */
public static UploadResultInfo getOSSResultByRegion(String transcodeJobId, String buckectName) public static UploadResultInfo getOSSResultByRegion(String transcodeJobId, String buckectName)
throws FileException { throws FileException {
if (AliyunConstant.LIVE_BUCKET.equals(buckectName)) if (AliyunConstant.LIVE_BUCKET.equals(buckectName)) {
return getOSSResult(transcodeJobId, AliyunConstant.LIVE_BUCKET); return getOSSResult(transcodeJobId, AliyunConstant.LIVE_BUCKET);
else } else {
return getOSSResult(transcodeJobId, AliyunConstant.FILE_BUCKET); return getOSSResult(transcodeJobId, AliyunConstant.FILE_BUCKET);
}
} }
/** /**
* 组装转换后的地址 * 组装转换后的地址
* *
...@@ -954,7 +955,7 @@ public class OssUtils { ...@@ -954,7 +955,7 @@ public class OssUtils {
Job transcodeJob = getTranscodeJob(transcodeJobId, outputBucketName); Job transcodeJob = getTranscodeJob(transcodeJobId, outputBucketName);
return explainTranscodeResult(transcodeJob); return explainTranscodeResult(transcodeJob);
} }
/** /**
* 获取转换作业情况 * 获取转换作业情况
* *
...@@ -973,7 +974,7 @@ public class OssUtils { ...@@ -973,7 +974,7 @@ public class OssUtils {
throw new FileException(FileException.FILE_CONVERT_FAIL, "获取转换作业情况失败"); throw new FileException(FileException.FILE_CONVERT_FAIL, "获取转换作业情况失败");
} }
} }
/** /**
* 解析转换后的结果 * 解析转换后的结果
* *
...@@ -1015,7 +1016,7 @@ public class OssUtils { ...@@ -1015,7 +1016,7 @@ public class OssUtils {
} }
return null; return null;
} }
/** /**
* 获取媒体信息,仅限经过转码的音视频文件 * 获取媒体信息,仅限经过转码的音视频文件
* *
...@@ -1050,11 +1051,11 @@ public class OssUtils { ...@@ -1050,11 +1051,11 @@ public class OssUtils {
ossMediaInfoDTO.setObejctKey(objectKey); ossMediaInfoDTO.setObejctKey(objectKey);
ossMediaInfoDTO.setSize(StringUtil.isEmpty(format.getSize()) ? 0L : Long.parseLong(format.getSize())); ossMediaInfoDTO.setSize(StringUtil.isEmpty(format.getSize()) ? 0L : Long.parseLong(format.getSize()));
ossMediaInfoDTO.setDuration( ossMediaInfoDTO.setDuration(
StringUtil.isEmpty(format.getDuration()) ? 0 : new Double(format.getDuration()).intValue()); StringUtil.isEmpty(format.getDuration()) ? 0 : new Double(format.getDuration()).intValue());
LOGGER.info("【aliOSS】获取媒体信息,仅限经过转码的音视频文件,<END>.[ossMediaInfoDTO]=" + ossMediaInfoDTO); LOGGER.info("【aliOSS】获取媒体信息,仅限经过转码的音视频文件,<END>.[ossMediaInfoDTO]=" + ossMediaInfoDTO);
return ossMediaInfoDTO; return ossMediaInfoDTO;
} }
/** /**
* 获取文件的元信息 * 获取文件的元信息
* *
...@@ -1069,7 +1070,7 @@ public class OssUtils { ...@@ -1069,7 +1070,7 @@ public class OssUtils {
ossClient.shutdown(); ossClient.shutdown();
return objectMetadata; return objectMetadata;
} }
/** /**
* 下载文件成byte[] * 下载文件成byte[]
* *
...@@ -1096,25 +1097,28 @@ public class OssUtils { ...@@ -1096,25 +1097,28 @@ public class OssUtils {
os.write(buff, 0, rc); os.write(buff, 0, rc);
} }
result = os.toByteArray(); result = os.toByteArray();
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("【aliOSS】下载文件失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】下载文件失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_DOWNLOAD_FAILURE, "下载文件失败"); throw new FileException(FileException.FILE_DOWNLOAD_FAILURE, "下载文件失败");
} finally { } finally {
try { try {
if (is != null) if (is != null) {
is.close(); is.close();
if (os != null) }
if (os != null) {
os.close(); os.close();
if (ossClient != null) }
if (ossClient != null) {
ossClient.shutdown(); ossClient.shutdown();
}
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("【aliOSS】下载文件,关闭文件流失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】下载文件,关闭文件流失败:" + e.getMessage(), e);
} }
} }
return result; return result;
} }
/** /**
* 下载文件到本地 * 下载文件到本地
* *
...@@ -1134,11 +1138,12 @@ public class OssUtils { ...@@ -1134,11 +1138,12 @@ public class OssUtils {
LOGGER.error("【aliOSS】下载文件失败:" + e.getMessage(), e); LOGGER.error("【aliOSS】下载文件失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_DOWNLOAD_FAILURE, "下载文件失败"); throw new FileException(FileException.FILE_DOWNLOAD_FAILURE, "下载文件失败");
} finally { } finally {
if (ossClient != null) if (ossClient != null) {
ossClient.shutdown(); ossClient.shutdown();
}
} }
} }
/** /**
* 组装返回的文件信息 <br> isPrivateKey=true,表示地址可下载,但需要加上密钥,密钥生产使用方法getHashValue或者addUrlKey <br> * 组装返回的文件信息 <br> isPrivateKey=true,表示地址可下载,但需要加上密钥,密钥生产使用方法getHashValue或者addUrlKey <br>
* *
...@@ -1149,7 +1154,7 @@ public class OssUtils { ...@@ -1149,7 +1154,7 @@ public class OssUtils {
* @return * @return
*/ */
private static UploadResultInfo getResultInfo(String objectKey, Long size, String duration, private static UploadResultInfo getResultInfo(String objectKey, Long size, String duration,
String outputBucketName) { String outputBucketName) {
UploadResultInfo uploadResultInfo = new UploadResultInfo(); UploadResultInfo uploadResultInfo = new UploadResultInfo();
uploadResultInfo.setObjectKey(objectKey); uploadResultInfo.setObjectKey(objectKey);
uploadResultInfo.setUrl(getOSSUrl(objectKey, outputBucketName)); uploadResultInfo.setUrl(getOSSUrl(objectKey, outputBucketName));
...@@ -1167,7 +1172,7 @@ public class OssUtils { ...@@ -1167,7 +1172,7 @@ public class OssUtils {
} }
return uploadResultInfo; return uploadResultInfo;
} }
/** /**
* 组装转换后的地址 * 组装转换后的地址
* *
...@@ -1181,7 +1186,7 @@ public class OssUtils { ...@@ -1181,7 +1186,7 @@ public class OssUtils {
} }
return AliyunConstant.getOSSCDNUrl(outputBucketName) + objectKey; return AliyunConstant.getOSSCDNUrl(outputBucketName) + objectKey;
} }
/** /**
* 从完整的HTTP路径中截取objectName * 从完整的HTTP路径中截取objectName
* *
...@@ -1214,7 +1219,7 @@ public class OssUtils { ...@@ -1214,7 +1219,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】从完整的HTTP路径中截取objectKey,<END>.[fileUrl]=" + fileUrl); LOGGER.info("【aliOSS】从完整的HTTP路径中截取objectKey,<END>.[fileUrl]=" + fileUrl);
return fileUrl; return fileUrl;
} }
/** /**
* 组装输入文件Object路径 * 组装输入文件Object路径
* *
...@@ -1224,14 +1229,9 @@ public class OssUtils { ...@@ -1224,14 +1229,9 @@ public class OssUtils {
* @return * @return
*/ */
private static String getInObjectKey(AliyunEnum aliyunEnum, String fileName, String fileType) { private static String getInObjectKey(AliyunEnum aliyunEnum, String fileName, String fileType) {
fileName = StringUtil.isEmpty(fileName) ? UUIDUitl.taskName() return getObjectKey(aliyunEnum, fileName, fileType);
: (FileUtils.formatName(fileName) + "_" + LocalDateUtils.getYmdhmss());
String gatherName = FileUtils.getGatherName(fileType);
gatherName = StringUtil.isEmpty(gatherName) ? "other" : gatherName.toLowerCase();
return new StringBuilder("oss/").append(aliyunEnum.value).append("/").append(gatherName).append("/").append(fileType)
.append("/").append(fileName).append(".").append(fileType).toString();
} }
/** /**
* 组装输出文件Object路径 * 组装输出文件Object路径
* *
...@@ -1241,14 +1241,26 @@ public class OssUtils { ...@@ -1241,14 +1241,26 @@ public class OssUtils {
* @return * @return
*/ */
private static String getOutObjectKey(AliyunEnum aliyunEnum, String fileName, String fileType) { private static String getOutObjectKey(AliyunEnum aliyunEnum, String fileName, String fileType) {
return getObjectKey(aliyunEnum, fileName, fileType);
}
/**
* 组装ObjectKey
*
* @param aliyunEnum
* @param fileName
* @param fileType
* @return
*/
private static String getObjectKey(AliyunEnum aliyunEnum, String fileName, String fileType) {
fileName = StringUtil.isEmpty(fileName) ? UUIDUitl.taskName() fileName = StringUtil.isEmpty(fileName) ? UUIDUitl.taskName()
: (FileUtils.formatName(fileName) + "_" + LocalDateUtils.getYmdhmss()); : (FileUtils.formatName(fileName) + "_" + LocalDateUtils.getYmdhmss());
String gatherName = FileUtils.getGatherName(fileType); String gatherName = FileUtils.getGatherName(fileType);
gatherName = StringUtil.isEmpty(gatherName) ? "other" : gatherName.toLowerCase(); gatherName = StringUtil.isEmpty(gatherName) ? "other" : gatherName.toLowerCase();
return new StringBuilder("oss/").append(aliyunEnum.value).append("/").append(gatherName).append("/").append(fileType) return new StringBuilder("oss/").append(aliyunEnum.value).append("/").append(gatherName).append("/")
.append("/").append(fileName).append(".").append(fileType).toString(); .append(fileType).append("/").append(fileName).append(".").append(fileType).toString();
} }
/** /**
* 获取文件下载加密密钥,默认有效期48小时 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br> * 获取文件下载加密密钥,默认有效期48小时 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br>
* *
...@@ -1258,7 +1270,7 @@ public class OssUtils { ...@@ -1258,7 +1270,7 @@ public class OssUtils {
public static String getHashValue(String fileUrl) { public static String getHashValue(String fileUrl) {
return getHashValue(fileUrl, AliyunConstant.OSS_DEFAULT_TIME); return getHashValue(fileUrl, AliyunConstant.OSS_DEFAULT_TIME);
} }
/** /**
* 获取文件下载加密密钥,长期有效 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br> * 获取文件下载加密密钥,长期有效 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br>
* *
...@@ -1268,12 +1280,12 @@ public class OssUtils { ...@@ -1268,12 +1280,12 @@ public class OssUtils {
public static String getHashValueLong(String fileUrl) { public static String getHashValueLong(String fileUrl) {
return getHashValue(fileUrl, AliyunConstant.OSS_LONG_TIME); return getHashValue(fileUrl, AliyunConstant.OSS_LONG_TIME);
} }
/** /**
* 获取文件下载加密密钥 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br> * 获取文件下载加密密钥 <br> 密钥需要结合域名https://download.5rs.me使用,可以在浏览器直接下载 <br>
* *
* @param fileUrl * @param fileUrl
* @param second 秒,地址有效期 * @param second 秒,地址有效期
* @return * @return
*/ */
public static String getHashValue(String fileUrl, long second) { public static String getHashValue(String fileUrl, long second) {
...@@ -1288,7 +1300,7 @@ public class OssUtils { ...@@ -1288,7 +1300,7 @@ public class OssUtils {
String key = MD5.getMD5StrLower(objectKey + "-" + timestamp + "-0-0-" + AliyunConstant.OSS_PRIVATE_KEY); String key = MD5.getMD5StrLower(objectKey + "-" + timestamp + "-0-0-" + AliyunConstant.OSS_PRIVATE_KEY);
return "?auth_key=" + timestamp + "-0-0-" + key; return "?auth_key=" + timestamp + "-0-0-" + key;
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> 默认有效期48小时 * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> 默认有效期48小时
* *
...@@ -1298,7 +1310,7 @@ public class OssUtils { ...@@ -1298,7 +1310,7 @@ public class OssUtils {
public static String urlAddKey(String fileUrl) { public static String urlAddKey(String fileUrl) {
return urlAddKey(fileUrl, AliyunConstant.OSS_DEFAULT_TIME); return urlAddKey(fileUrl, AliyunConstant.OSS_DEFAULT_TIME);
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> 长期有效 * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> 长期有效
* *
...@@ -1308,37 +1320,37 @@ public class OssUtils { ...@@ -1308,37 +1320,37 @@ public class OssUtils {
public static String urlAddKeyLong(String fileUrl) { public static String urlAddKeyLong(String fileUrl) {
return urlAddKey(fileUrl, AliyunConstant.OSS_LONG_TIME); return urlAddKey(fileUrl, AliyunConstant.OSS_LONG_TIME);
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问 <br>
* *
* @param fileUrl 文件URL全路径地址 * @param fileUrl 文件URL全路径地址
* @param second 秒,地址有效期 * @param second 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey(String fileUrl, long second) { public static String urlAddKey(String fileUrl, long second) {
String result = keyCheckFile(fileUrl); String result = keyCheckFile(fileUrl);
return ZSEncode.encodeURI(result) + getHashValue(result, second); return ZSEncode.encodeURI(result) + getHashValue(result, second);
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问(不转义中文) <br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问(不转义中文) <br>
* *
* @param fileUrl 文件URL全路径地址 * @param fileUrl 文件URL全路径地址
* @param second 秒,地址有效期 * @param second 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKeyChina(String fileUrl, long second) { public static String urlAddKeyChina(String fileUrl, long second) {
String result = keyCheckFile(fileUrl); String result = keyCheckFile(fileUrl);
return result + getHashValue(result, second); return result + getHashValue(result, second);
} }
private static String keyCheckFile(String fileUrl) { private static String keyCheckFile(String fileUrl) {
if (StringUtil.isEmpty(fileUrl)) { if (StringUtil.isEmpty(fileUrl)) {
return null; return null;
} }
if (!(StringTools.contains(fileUrl, AliyunConstant.RAYS_CDN_URLS) if (!(StringTools.contains(fileUrl, AliyunConstant.RAYS_CDN_URLS)
|| fileUrl.contains(AliyunConstant.FILE_CDN_URL_DOWNLOAD))) { || fileUrl.contains(AliyunConstant.FILE_CDN_URL_DOWNLOAD))) {
return fileUrl; return fileUrl;
} }
if (fileUrl.contains("?auth_key=")) { if (fileUrl.contains("?auth_key=")) {
...@@ -1347,7 +1359,7 @@ public class OssUtils { ...@@ -1347,7 +1359,7 @@ public class OssUtils {
// 替换域名为可访问的 // 替换域名为可访问的
return StringTools.replace(fileUrl, AliyunConstant.RAYS_CDN_URLS, AliyunConstant.FILE_CDN_URL_DOWNLOAD); return StringTools.replace(fileUrl, AliyunConstant.RAYS_CDN_URLS, AliyunConstant.FILE_CDN_URL_DOWNLOAD);
} }
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> 默认有效期48小时 * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> 默认有效期48小时
* *
...@@ -1357,7 +1369,7 @@ public class OssUtils { ...@@ -1357,7 +1369,7 @@ public class OssUtils {
public static String urlAddKey2Sms(String fileUrl) { public static String urlAddKey2Sms(String fileUrl) {
return urlAddKey2Sms(fileUrl, AliyunConstant.OSS_DEFAULT_TIME); return urlAddKey2Sms(fileUrl, AliyunConstant.OSS_DEFAULT_TIME);
} }
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> 长期有效 * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> 长期有效
* *
...@@ -1367,12 +1379,12 @@ public class OssUtils { ...@@ -1367,12 +1379,12 @@ public class OssUtils {
public static String urlAddKeyLong2Sms(String fileUrl) { public static String urlAddKeyLong2Sms(String fileUrl) {
return urlAddKey2Sms(fileUrl, AliyunConstant.OSS_LONG_TIME); return urlAddKey2Sms(fileUrl, AliyunConstant.OSS_LONG_TIME);
} }
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br>
* *
* @param fileUrl 文件URL全路径地址 * @param fileUrl 文件URL全路径地址
* @param second 秒,地址有效期 * @param second 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey2Sms(String fileUrl, long second) { public static String urlAddKey2Sms(String fileUrl, long second) {
...@@ -1380,7 +1392,7 @@ public class OssUtils { ...@@ -1380,7 +1392,7 @@ public class OssUtils {
String shortUrl = UrlUtils.getShortUrl(keyUrl); String shortUrl = UrlUtils.getShortUrl(keyUrl);
return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.TB_SHORT_URL, ""); return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.TB_SHORT_URL, "");
} }
/** /**
* 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br> * 将文件URL生成带密钥的下载地址,返回的地址不带域名 <br>
* *
...@@ -1392,7 +1404,7 @@ public class OssUtils { ...@@ -1392,7 +1404,7 @@ public class OssUtils {
String shortUrl = UrlUtils.getShortUrl4Own(keyUrl); String shortUrl = UrlUtils.getShortUrl4Own(keyUrl);
return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.OWN_SHORT_URL, ""); return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl.replace(UrlConstant.OWN_SHORT_URL, "");
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br>
* *
...@@ -1402,7 +1414,7 @@ public class OssUtils { ...@@ -1402,7 +1414,7 @@ public class OssUtils {
public static String urlAddKey2Short(String fileUrl) { public static String urlAddKey2Short(String fileUrl) {
return urlAddKey2Short(fileUrl, AliyunConstant.OSS_DEFAULT_TIME); return urlAddKey2Short(fileUrl, AliyunConstant.OSS_DEFAULT_TIME);
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问 ,并转换为短链接<br> 长期有效 * 将文件URL生成带密钥的地址,可以在浏览器直接访问 ,并转换为短链接<br> 长期有效
* *
...@@ -1412,12 +1424,12 @@ public class OssUtils { ...@@ -1412,12 +1424,12 @@ public class OssUtils {
public static String urlAddKeyLong2Short(String fileUrl) { public static String urlAddKeyLong2Short(String fileUrl) {
return urlAddKey2Short(fileUrl, AliyunConstant.OSS_LONG_TIME); return urlAddKey2Short(fileUrl, AliyunConstant.OSS_LONG_TIME);
} }
/** /**
* 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br> * 将文件URL生成带密钥的地址,可以在浏览器直接访问,并转换为短链接<br>
* *
* @param fileUrl 文件URL全路径地址 * @param fileUrl 文件URL全路径地址
* @param second 秒,地址有效期 * @param second 秒,地址有效期
* @return * @return
*/ */
public static String urlAddKey2Short(String fileUrl, long second) { public static String urlAddKey2Short(String fileUrl, long second) {
...@@ -1425,12 +1437,12 @@ public class OssUtils { ...@@ -1425,12 +1437,12 @@ public class OssUtils {
String shortUrl = UrlUtils.getShortUrl4Own(keyUrl); String shortUrl = UrlUtils.getShortUrl4Own(keyUrl);
return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl; return StringUtil.isEmpty(shortUrl) ? keyUrl : shortUrl;
} }
/** /**
* 图片缩放,按宽度等比例缩放 * 图片缩放,按宽度等比例缩放
* *
* @param fileUrl * @param fileUrl
* @param width 目前最大支持1024,超过1024或者小于0都按1024计算 * @param width 目前最大支持1024,超过1024或者小于0都按1024计算
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1448,12 +1460,12 @@ public class OssUtils { ...@@ -1448,12 +1460,12 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片缩放,<START>.[localPath]=" + localPath); LOGGER.info("【aliOSS】图片缩放,<START>.[localPath]=" + localPath);
return localPath; return localPath;
} }
/** /**
* 图片缩放,按倍数百分比缩放 * 图片缩放,按倍数百分比缩放
* *
* @param fileUrl * @param fileUrl
* @param p 1-1000,倍数百分比。 小于100,即是缩小,大于100即是放大。 * @param p 1-1000,倍数百分比。 小于100,即是缩小,大于100即是放大。
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1471,12 +1483,12 @@ public class OssUtils { ...@@ -1471,12 +1483,12 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片缩放,<START>.[localPath]=" + localPath); LOGGER.info("【aliOSS】图片缩放,<START>.[localPath]=" + localPath);
return localPath; return localPath;
} }
/** /**
* 图片自动旋转 * 图片自动旋转
* *
* @param fileUrl * @param fileUrl
* @param width 图片旋转以后的宽度,最大不能超过4096,传0则按原始宽度旋转 * @param width 图片旋转以后的宽度,最大不能超过4096,传0则按原始宽度旋转
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1497,15 +1509,15 @@ public class OssUtils { ...@@ -1497,15 +1509,15 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片自动旋转,<START>.[localPath]=" + localPath); LOGGER.info("【aliOSS】图片自动旋转,<START>.[localPath]=" + localPath);
return localPath; return localPath;
} }
/** /**
* 图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。 * 图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。
* *
* @param fileUrl * @param fileUrl
* @param width 裁剪的宽度 * @param width 裁剪的宽度
* @param height 裁剪的高度 * @param height 裁剪的高度
* @param x 左上角开始, 裁剪的X轴坐标 * @param x 左上角开始, 裁剪的X轴坐标
* @param y 左上角开始, 裁剪的Y轴坐标 * @param y 左上角开始, 裁剪的Y轴坐标
* @return 返回处理后的图片本地地址 * @return 返回处理后的图片本地地址
* @throws FileException * @throws FileException
*/ */
...@@ -1525,7 +1537,7 @@ public class OssUtils { ...@@ -1525,7 +1537,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片裁剪,<END>.[localPath]=" + localPath); LOGGER.info("【aliOSS】图片裁剪,<END>.[localPath]=" + localPath);
return localPath; return localPath;
} }
/** /**
* <持久化>图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。 * <持久化>图片裁剪,如果图片带有旋转属性,会自动旋转纠正角度后在进行裁剪。
* *
...@@ -1537,13 +1549,13 @@ public class OssUtils { ...@@ -1537,13 +1549,13 @@ public class OssUtils {
* @return * @return
* @throws FileException * @throws FileException
*/ */
public static OssImageCropDTO imageCropSaveas(String fileUrl, int width, int height, int x, int y) throws FileException { public static OssImageCropDTO imageCropSaveas(String fileUrl, int width, int height, int x, int y)
throws FileException {
LOGGER.info("【aliOSS】图片裁剪持久化,<START>.[fileUrl]=" + fileUrl); LOGGER.info("【aliOSS】图片裁剪持久化,<START>.[fileUrl]=" + fileUrl);
ImageUtils.checkIsImage(fileUrl); ImageUtils.checkIsImage(fileUrl);
if (!(width >= 0 && width <= 4096 && height >= 0 && height <= 4096 && x >= 0 && y >= 0)) { if (!(width >= 0 && width <= 4096 && height >= 0 && height <= 4096 && x >= 0 && y >= 0)) {
throw new FileException(FileException.PARAM_ERROR, "裁剪的长宽或者坐标数值必须大于0且长宽必须小于4096"); throw new FileException(FileException.PARAM_ERROR, "裁剪的长宽或者坐标数值必须大于0且长宽必须小于4096");
} }
String fileName = FileUtils.getFileName(fileUrl);
String fileType = FileUtils.getFileType(fileUrl); String fileType = FileUtils.getFileType(fileUrl);
String bucketName = AliyunConstant.getBucketName(fileUrl); String bucketName = AliyunConstant.getBucketName(fileUrl);
String sourceKey = splitObjectKey(fileUrl); String sourceKey = splitObjectKey(fileUrl);
...@@ -1553,7 +1565,8 @@ public class OssUtils { ...@@ -1553,7 +1565,8 @@ public class OssUtils {
style.append(",x_").append(x); style.append(",x_").append(x);
style.append(",y_").append(y); style.append(",y_").append(y);
style.append("|sys/saveas"); style.append("|sys/saveas");
style.append(",o_").append(BinaryUtil.toBase64String(getOutObjectKey(AliyunEnum.CUT, fileName, fileType).getBytes())); String outObjectKey = getOutObjectKey(AliyunEnum.CUT, null, fileType);
style.append(",o_").append(BinaryUtil.toBase64String(outObjectKey.getBytes()));
style.append(",b_").append(BinaryUtil.toBase64String(bucketName.getBytes())); style.append(",b_").append(BinaryUtil.toBase64String(bucketName.getBytes()));
ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceKey, style.toString()); ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceKey, style.toString());
// 创建OSSClient实例 // 创建OSSClient实例
...@@ -1571,7 +1584,7 @@ public class OssUtils { ...@@ -1571,7 +1584,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片裁剪持久化,<END>.[ossImageCropDTO]=" + ossImageCropDTO); LOGGER.info("【aliOSS】图片裁剪持久化,<END>.[ossImageCropDTO]=" + ossImageCropDTO);
return ossImageCropDTO; return ossImageCropDTO;
} }
/** /**
* 图片处理 * 图片处理
* *
...@@ -1599,7 +1612,7 @@ public class OssUtils { ...@@ -1599,7 +1612,7 @@ public class OssUtils {
} }
return localPath; return localPath;
} }
/** /**
* 图片增加水印 * 图片增加水印
* *
...@@ -1624,7 +1637,7 @@ public class OssUtils { ...@@ -1624,7 +1637,7 @@ public class OssUtils {
FileUtils.deleteFile(localPath); FileUtils.deleteFile(localPath);
return uploadResultInfo == null ? null : uploadResultInfo.getUrl(); return uploadResultInfo == null ? null : uploadResultInfo.getUrl();
} }
/** /**
* 图片增加水印(文本) * 图片增加水印(文本)
* *
...@@ -1666,11 +1679,11 @@ public class OssUtils { ...@@ -1666,11 +1679,11 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片增加水印(文本),<END>.[result]=" + result); LOGGER.info("【aliOSS】图片增加水印(文本),<END>.[result]=" + result);
return result; return result;
} }
/** /**
* 图片增加水印(图片) * 图片增加水印(图片)
* *
* @param fileUrl 原图地址 * @param fileUrl 原图地址
* @param watermarkImageUrl 水印图片地址 * @param watermarkImageUrl 水印图片地址
* @return * @return
* @throws FileException * @throws FileException
...@@ -1690,7 +1703,7 @@ public class OssUtils { ...@@ -1690,7 +1703,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】图片增加水印(图片),<END>.[result]=" + result); LOGGER.info("【aliOSS】图片增加水印(图片),<END>.[result]=" + result);
return result; return result;
} }
/** /**
* 图片水印处理 * 图片水印处理
* *
...@@ -1708,7 +1721,7 @@ public class OssUtils { ...@@ -1708,7 +1721,7 @@ public class OssUtils {
OSSClient ossClient = getOSSClient(bucketName); OSSClient ossClient = getOSSClient(bucketName);
// 生成带水印的本地图片地址 // 生成带水印的本地图片地址
String localPath = FilePathConst.IMAGE_WATERMARK_PATH + fileName + "_" + LocalDateUtils.getYmdhmss() + "." String localPath = FilePathConst.IMAGE_WATERMARK_PATH + fileName + "_" + LocalDateUtils.getYmdhmss() + "."
+ fileType; + fileType;
FileUtils.creatFiles(localPath); FileUtils.creatFiles(localPath);
ossClient.getObject(request, new File(localPath)); ossClient.getObject(request, new File(localPath));
ossClient.shutdown(); ossClient.shutdown();
...@@ -1717,7 +1730,7 @@ public class OssUtils { ...@@ -1717,7 +1730,7 @@ public class OssUtils {
FileUtils.deleteFile(localPath); FileUtils.deleteFile(localPath);
return uploadResultInfo == null ? null : uploadResultInfo.getUrl(); return uploadResultInfo == null ? null : uploadResultInfo.getUrl();
} }
/** /**
* 检查图片文件合法性,如果是本地文件先上传 * 检查图片文件合法性,如果是本地文件先上传
* *
...@@ -1742,7 +1755,7 @@ public class OssUtils { ...@@ -1742,7 +1755,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】检查文件合法性,<END>.[fileUrl]=" + fileUrl); LOGGER.info("【aliOSS】检查文件合法性,<END>.[fileUrl]=" + fileUrl);
return fileUrl; return fileUrl;
} }
/** /**
* 计算图片水印文字大小 * 计算图片水印文字大小
* *
...@@ -1756,7 +1769,7 @@ public class OssUtils { ...@@ -1756,7 +1769,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】计算图片水印文字大小,<END>.[result]=" + result); LOGGER.info("【aliOSS】计算图片水印文字大小,<END>.[result]=" + result);
return Math.round(result); return Math.round(result);
} }
/** /**
* 获取OSS客户端 * 获取OSS客户端
* *
...@@ -1764,9 +1777,9 @@ public class OssUtils { ...@@ -1764,9 +1777,9 @@ public class OssUtils {
*/ */
private static OSSClient getOSSClient(String bucketName) { private static OSSClient getOSSClient(String bucketName) {
return new OSSClient(AliyunConstant.getOSSEndPoint(bucketName), AliyunConstant.MAIN_ACCESS_KEY_ID, return new OSSClient(AliyunConstant.getOSSEndPoint(bucketName), AliyunConstant.MAIN_ACCESS_KEY_ID,
AliyunConstant.MAIN_ACCESS_KEY_SECRET); AliyunConstant.MAIN_ACCESS_KEY_SECRET);
} }
/** /**
* 判断object是否存在 * 判断object是否存在
* *
...@@ -1774,14 +1787,14 @@ public class OssUtils { ...@@ -1774,14 +1787,14 @@ public class OssUtils {
* @param objectKey * @param objectKey
* @return * @return
*/ */
private static boolean doesObjectExist(String bucketName, String objectKey) { private static boolean objectExist(String bucketName, String objectKey) {
OSSClient ossClient = getOSSClient(bucketName); OSSClient ossClient = getOSSClient(bucketName);
boolean found = ossClient.doesObjectExist(bucketName, objectKey); boolean found = ossClient.doesObjectExist(bucketName, objectKey);
// 关闭client // 关闭client
ossClient.shutdown(); ossClient.shutdown();
return found; return found;
} }
/** /**
* 判断文件是存在001中 * 判断文件是存在001中
* *
...@@ -1789,14 +1802,10 @@ public class OssUtils { ...@@ -1789,14 +1802,10 @@ public class OssUtils {
* @return true:001,false:002 * @return true:001,false:002
*/ */
public static boolean fileUrlExist001(String fileUrl) { public static boolean fileUrlExist001(String fileUrl) {
boolean isUploadfe = false;
String objectKey = splitObjectKey(fileUrl); String objectKey = splitObjectKey(fileUrl);
if (doesObjectExist(AliyunConstant.INPUT_BUCKET, objectKey)) { return objectExist(AliyunConstant.INPUT_BUCKET, objectKey);
isUploadfe = true;
}
return isUploadfe;
} }
/** /**
* 判断文件是存在002中 * 判断文件是存在002中
* *
...@@ -1804,12 +1813,8 @@ public class OssUtils { ...@@ -1804,12 +1813,8 @@ public class OssUtils {
* @return true:001,false:002 * @return true:001,false:002
*/ */
public static boolean fileUrlExist002(String fileUrl) { public static boolean fileUrlExist002(String fileUrl) {
boolean isUploadfe = false;
String objectKey = splitObjectKey(fileUrl); String objectKey = splitObjectKey(fileUrl);
if (doesObjectExist(AliyunConstant.FILE_BUCKET, objectKey)) { return objectExist(AliyunConstant.FILE_BUCKET, objectKey);
isUploadfe = true;
}
return isUploadfe;
} }
} }
package com.pcloud.common.utils.httpclient; package com.pcloud.common.utils.httpclient;
import com.alibaba.fastjson.JSONArray; import java.io.IOException;
import com.alibaba.fastjson.JSONObject; import java.nio.charset.Charset;
import com.pcloud.common.utils.rsa.MD5;
import com.pcloud.common.utils.string.StringUtil;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
...@@ -15,175 +14,198 @@ import org.apache.http.util.EntityUtils; ...@@ -15,175 +14,198 @@ import org.apache.http.util.EntityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import com.alibaba.fastjson.JSONArray;
import java.nio.charset.Charset; import com.alibaba.fastjson.JSONObject;
import com.pcloud.common.utils.rsa.MD5;
import com.pcloud.common.utils.string.StringUtil;
/** /**
* @author:songx * @author:songx
* @date:2017年12月4日,下午4:58:39 * @date:2017年12月4日,下午4:58:39
*/ */
public class UrlUtils { public class UrlUtils {
/** /**
* *
*/ */
private static final Logger LOGGER = LoggerFactory.getLogger(UrlUtils.class); private static final Logger LOGGER = LoggerFactory.getLogger(UrlUtils.class);
/** /**
* 请求地址(新郎接口) * 请求地址(新郎接口)
*/ */
private static final String REQUEST_URL = "https://api.weibo.com/2/short_url/shorten.json?source=1681459862&url_long="; private static final String REQUEST_URL = "https://api.weibo.com/2/short_url/shorten.json?source=1681459862&url_long=";
/** /**
* 请求地址(OWN) * 请求地址(OWN)
*/ */
private static final String REQUEST_URL2 = "https://rays.5rs.me/convert/v1.0/url/shorten"; private static final String REQUEST_URL2 = "https://rays.5rs.me/convert/v1.0/url/shorten";
/** /**
* 自定义生成 MD5 加密字符传前的混合 KEY * 请求地址(OWN)
*/ */
public static final String PRIVATE_KEY = "lgsc1205"; private static final String REQUEST_URL3 = "https://rays.5rs.me/convert/v1.0/url/expand?hex=";
/** /**
* 获取短链接(新浪) * 自定义生成 MD5 加密字符传前的混合 KEY
* */
* @param long_url public static final String PRIVATE_KEY = "lgsc1205";
* @return
*/ /**
public static String getShortUrl(String long_url) { * 获取短链接(新浪)
String result = callHttp(long_url); *
if (StringUtil.isEmpty(result)) { * @param long_url
return null; * @return
} */
JSONObject resultObject = JSONObject.parseObject(result); public static String getShortUrl(String long_url) {
JSONArray array = resultObject.getJSONArray("urls"); String result = callHttp(REQUEST_URL + long_url);
JSONObject object = array.getJSONObject(0); if (StringUtil.isEmpty(result)) {
return object.getString("url_short"); return null;
} }
JSONObject resultObject = JSONObject.parseObject(result);
/** JSONArray array = resultObject.getJSONArray("urls");
* 发送请求(新浪) JSONObject object = array.getJSONObject(0);
* return object.getString("url_short");
* @param long_url }
* @return
*/ /**
private static String callHttp(String long_url) { * 发送请求(新浪)
LOGGER.info("【URL】短链接转换(新浪),<START>.[long_url]=" + long_url); *
CloseableHttpClient httpclient = HttpClients.createDefault(); * @param request
HttpGet httpGet = new HttpGet(REQUEST_URL + long_url); * @return
String resContent = null; */
try { private static String callHttp(String request) {
CloseableHttpResponse response = httpclient.execute(httpGet); LOGGER.info("【URL】短链接转换(新浪),<START>.[request]=" + request);
// 获取响应实体 CloseableHttpClient httpclient = HttpClients.createDefault();
HttpEntity entity = response.getEntity(); HttpGet httpGet = new HttpGet(request);
if (entity != null) { String resContent = null;
resContent = EntityUtils.toString(entity); try {
} CloseableHttpResponse response = httpclient.execute(httpGet);
} catch (IOException e) { // 获取响应实体
LOGGER.error("【URL】短链接转换失败(新浪):" + e.getMessage(), e); HttpEntity entity = response.getEntity();
} if (entity != null) {
LOGGER.info("【URL】短链接转换(新浪),<END>.[resContent]=" + resContent); resContent = EntityUtils.toString(entity);
return resContent; }
} } catch (IOException e) {
LOGGER.error("【URL】短链接转换失败(新浪):" + e.getMessage(), e);
/** }
* 获取短链接(OWN) LOGGER.info("【URL】短链接转换(新浪),<END>.[resContent]=" + resContent);
* return resContent;
* @param long_url }
* @return
*/ /**
public static String getShortUrl4Own(String long_url) { * 获取长链接(OWN)
String result = callHttp4Own(long_url); *
if (StringUtil.isEmpty(result)) { * @param hex
return null; * @return
} */
JSONObject resultObject = JSONObject.parseObject(result); public static String getUrl4Own(String hex) {
JSONObject dataObject = resultObject.getJSONObject("data"); String result = callHttp(REQUEST_URL3 + hex);
return dataObject == null ? null : dataObject.getString("shortUrl"); if (StringUtil.isEmpty(result)) {
} return null;
}
/** JSONObject resultObject = JSONObject.parseObject(result);
* 发送请求(OWN) JSONObject dataObject = resultObject.getJSONObject("data");
* return dataObject.getString("originUrl");
* @param long_url }
* @return
*/ /**
private static String callHttp4Own(String long_url) { * 获取短链接(OWN)
LOGGER.info("【URL】短链接转换(OWN),<START>.[long_url]=" + long_url); *
if (StringUtil.isEmpty(long_url)) { * @param long_url
return null; * @return
} */
CloseableHttpClient httpclient = HttpClients.createDefault(); public static String getShortUrl4Own(String long_url) {
HttpPost httpPost = new HttpPost(REQUEST_URL2); String result = callHttp4Own(long_url);
String resContent = null; if (StringUtil.isEmpty(result)) {
try { return null;
// 设置参数到请求对象中 }
JSONObject jsonObject = new JSONObject(); JSONObject resultObject = JSONObject.parseObject(result);
jsonObject.put("originUrl", long_url); JSONObject dataObject = resultObject.getJSONObject("data");
StringEntity stringEntity = new StringEntity(jsonObject.toJSONString(), Charset.forName("UTF-8")); return dataObject == null ? null : dataObject.getString("shortUrl");
httpPost.setEntity(stringEntity); }
// 设置header信息
// 指定报文头【Content-type】、【User-Agent】 /**
httpPost.setHeader("Content-type", "application/json;charset=UTF-8"); * 发送请求(OWN)
CloseableHttpResponse response = httpclient.execute(httpPost); *
// 获取响应实体 * @param long_url
HttpEntity entity = response.getEntity(); * @return
if (entity != null) { */
resContent = EntityUtils.toString(entity); private static String callHttp4Own(String long_url) {
} LOGGER.info("【URL】短链接转换(OWN),<START>.[long_url]=" + long_url);
} catch (IOException e) { if (StringUtil.isEmpty(long_url)) {
LOGGER.error("【URL】短链接转换失败(OWN):" + e.getMessage(), e); return null;
} }
LOGGER.info("【URL】短链接转换(OWN),<END>.[resContent]=" + resContent); CloseableHttpClient httpclient = HttpClients.createDefault();
return resContent; HttpPost httpPost = new HttpPost(REQUEST_URL2);
} String resContent = null;
try {
/** // 设置参数到请求对象中
* 对传入的链接进行加密 JSONObject jsonObject = new JSONObject();
* jsonObject.put("originUrl", long_url);
* @param url StringEntity stringEntity = new StringEntity(jsonObject.toJSONString(), Charset.forName("UTF-8"));
* @return httpPost.setEntity(stringEntity);
*/ // 设置header信息
public static String[] shortenUrl(String url) { // 指定报文头【Content-type】、【User-Agent】
// 对传入网址进行 MD5 加密 httpPost.setHeader("Content-type", "application/json;charset=UTF-8");
String hex = MD5.getMD5Str(PRIVATE_KEY + url); CloseableHttpResponse response = httpclient.execute(httpPost);
return shortenUrlMd5(hex); // 获取响应实体
} HttpEntity entity = response.getEntity();
if (entity != null) {
/** resContent = EntityUtils.toString(entity);
* 缩短链接 }
* } catch (IOException e) {
* @param url LOGGER.error("【URL】短链接转换失败(OWN):" + e.getMessage(), e);
* @return }
*/ LOGGER.info("【URL】短链接转换(OWN),<END>.[resContent]=" + resContent);
public static String[] shortenUrlMd5(String hex) { return resContent;
// 要使用生成 URL 的字符 }
String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", /**
"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", * 对传入的链接进行加密
"W", "X", "Y", "Z" }; *
* @param url
String[] resUrl = new String[4]; * @return
for (int i = 0; i < 4; i++) { */
// 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算 public static String[] shortenUrl(String url) {
String sTempSubString = hex.substring(i * 8, i * 8 + 8); // 对传入网址进行 MD5 加密
String hex = MD5.getMD5Str(PRIVATE_KEY + url);
// 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 , return shortenUrlMd5(hex);
// 如果不用long ,则会越界 }
long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);
String outChars = ""; /**
for (int j = 0; j < 7; j++) { * 缩短链接
// 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引 *
long index = 0x0000003D & lHexLong; * @param hex
// 把取得的字符相加 * @return
outChars += chars[(int) index]; */
// 每次循环按位右移 4 位 public static String[] shortenUrlMd5(String hex) {
lHexLong = lHexLong >> 4; // 要使用生成 URL 的字符
} String[] chars = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
// 把字符串存入对应索引的输出数组 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
resUrl[i] = outChars; "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
} "W", "X", "Y", "Z"};
return resUrl;
} String[] resUrl = new String[4];
for (int i = 0; i < 4; i++) {
// 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算
String sTempSubString = hex.substring(i * 8, i * 8 + 8);
// 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 ,
// 如果不用long ,则会越界
long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);
String outChars = "";
for (int j = 0; j < 7; j++) {
// 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引
long index = 0x0000003D & lHexLong;
// 把取得的字符相加
outChars += chars[(int) index];
// 每次循环按位右移 4 位
lHexLong = lHexLong >> 4;
}
// 把字符串存入对应索引的输出数组
resUrl[i] = outChars;
}
return resUrl;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment