package org.yeshi.utils.tencentcloud;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
|
import org.apache.commons.codec.digest.HmacUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
import org.yeshi.utils.FileUtil;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.entity.FileUploadResult;
|
import org.yeshi.utils.tencentcloud.entity.COSInitParams;
|
|
import com.qcloud.cos.COSClient;
|
import com.qcloud.cos.ClientConfig;
|
import com.qcloud.cos.auth.BasicCOSCredentials;
|
import com.qcloud.cos.auth.COSCredentials;
|
import com.qcloud.cos.model.COSObjectSummary;
|
import com.qcloud.cos.model.ListObjectsRequest;
|
import com.qcloud.cos.model.ObjectListing;
|
import com.qcloud.cos.model.ObjectMetadata;
|
import com.qcloud.cos.model.PutObjectRequest;
|
import com.qcloud.cos.model.PutObjectResult;
|
import com.qcloud.cos.region.Region;
|
|
public class COSManager {
|
static long appId = 0L;
|
static String secretId = "";
|
static String secretKey = "";
|
// 设置要操作的bucket
|
static String bucketName = "";
|
static COSClient cosClient;
|
static String totalBucketName = "";
|
static String accessHost = "";
|
|
static COSManager instance;
|
|
public static COSManager getInstance() {
|
if (instance == null)
|
instance = new COSManager();
|
return instance;
|
}
|
|
/**
|
* 初始化,在使用之前必须调用此方法
|
*
|
* @param params
|
*/
|
public void init(COSInitParams params) {
|
appId = params.getAppId();
|
secretId = params.getSecretId();
|
secretKey = params.getSecretKey();
|
bucketName = params.getBucketName();
|
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
|
ClientConfig clientConfig = new ClientConfig(new Region(params.getRegion()));
|
cosClient = new COSClient(cred, clientConfig);
|
// bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
|
totalBucketName = bucketName + "-" + appId;
|
accessHost = params.getAccessHost();
|
}
|
|
public FileUploadResult uploadFile(File f, String key) {
|
if (key != null && !key.startsWith("/"))
|
key = "/" + key;
|
PutObjectRequest putObjectRequest = new PutObjectRequest(totalBucketName, key, f);
|
|
try {
|
PutObjectResult result = cosClient.putObject(putObjectRequest);
|
|
if (StringUtil.isNullOrEmpty(accessHost)) {
|
return new FileUploadResult(String.format("http://%s.file.myqcloud.com%s", totalBucketName, key),
|
result.getETag());
|
} else {
|
return new FileUploadResult(String.format("%s%s", accessHost, key),
|
result.getETag());
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public FileUploadResult uploadInputStream(InputStream inputStream, String key) {
|
int count = 0;
|
try {
|
count = inputStream.available();
|
} catch (IOException e1) {
|
e1.printStackTrace();
|
}
|
|
ObjectMetadata metadata = new ObjectMetadata();
|
metadata.setContentLength(count);
|
|
if (key != null && !key.startsWith("/"))
|
key = "/" + key;
|
PutObjectRequest putObjectRequest = new PutObjectRequest(totalBucketName, key, inputStream, metadata);
|
try {
|
PutObjectResult result = cosClient.putObject(putObjectRequest);
|
|
return new FileUploadResult(String.format("http://%s.file.myqcloud.com%s", totalBucketName, key),
|
result.getETag());
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public FileUploadResult uploadFile(InputStream inputStream, String key) {
|
if (key != null && !key.startsWith("/"))
|
key = "/" + key;
|
String dir = FileUtil.getCacheDir();
|
String tempPath = dir + "/temp_" + System.currentTimeMillis() + "_" + (long) (Math.random() * 100000000);
|
try {
|
|
try {
|
FileUtil.saveAsFile(inputStream, tempPath);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
if (new File(tempPath).exists()) {
|
return uploadFile(new File(tempPath), key);
|
}
|
return null;
|
} finally {
|
if (new File(tempPath).exists())
|
new File(tempPath).delete();
|
}
|
}
|
|
/**
|
* 获取Object列表
|
*
|
* @param prefix-匹配字符
|
* @param count-最大1000
|
* @param marker-起点标记
|
* @return
|
*/
|
|
public ObjectListing getObjectList(String prefix, String marker, int count) {
|
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
|
listObjectsRequest.setBucketName(totalBucketName);
|
listObjectsRequest.setDelimiter("/");
|
listObjectsRequest.setPrefix(prefix);
|
listObjectsRequest.setMaxKeys(count);
|
listObjectsRequest.setMarker(marker);
|
ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
|
return objectListing;
|
}
|
|
public COSObjectSummary getObjectDetail(String prefix) {
|
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
|
listObjectsRequest.setBucketName(totalBucketName);
|
listObjectsRequest.setDelimiter("/");
|
listObjectsRequest.setPrefix(prefix);
|
listObjectsRequest.setMaxKeys(1);
|
listObjectsRequest.setMarker(null);
|
ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
|
if (objectListing.getObjectSummaries() != null && objectListing.getObjectSummaries().size() > 0) {
|
return objectListing.getObjectSummaries().get(0);
|
}
|
return null;
|
}
|
|
// 文件是否存在
|
public boolean isFileExist(String url) {
|
String key = url.replace(String.format("https://%s.file.myqcloud.com", totalBucketName), "");
|
try {
|
cosClient.getObjectMetadata(totalBucketName, key);
|
return true;
|
} catch (Exception e) {
|
}
|
return false;
|
}
|
|
public boolean deleteFileByUrl(String url) {
|
String key = url.replace(String.format("https://%s.file.myqcloud.com", totalBucketName), "");
|
try {
|
cosClient.deleteObject(totalBucketName, key);
|
return true;
|
} catch (Exception e) {
|
}
|
return false;
|
}
|
|
public boolean deleteFileByKey(String key) {
|
try {
|
cosClient.deleteObject(totalBucketName, key);
|
return true;
|
} catch (Exception e) {
|
}
|
return false;
|
}
|
|
public static String getUploadVideoUrl(String name) {
|
if (name != null && !name.startsWith("/"))
|
name = "/" + name;
|
return "https://gz.file.myqcloud.com/files/v2/" + appId + "/" + bucketName + name;
|
}
|
|
public static String getUploadVideoFileId(String name) {
|
if (name != null && !name.startsWith("/"))
|
name = "/" + name;
|
return "/" + appId + "/" + bucketName + name;
|
}
|
|
public static String getUploadVideoAuthorization() {
|
long time = System.currentTimeMillis() / 1000;
|
long expireTime = time + 60 * 20;// 20分钟的上传时间
|
long random = (long) (1000000L * Math.random());
|
String original = String.format("a=%s&b=%s&k=%s&e=%s&t=%s&r=%s&f=", appId + "", bucketName, secretId,
|
(expireTime) + "", time + "", random + "");
|
byte[] so = HmacUtils.hmacSha1(secretKey, original);
|
byte[] or = original.getBytes();
|
byte[] bts = ArrayUtils.addAll(so, or);
|
String sign = StringUtil.getBase64FromByte(bts).replace("\n", "").replace("\r", "").trim();
|
return sign;
|
}
|
|
public FileUploadResult uploadFileByte(byte[] b, String key) {
|
if (key != null && !key.startsWith("/"))
|
key = "/" + key;
|
String dir = FileUtil.getCacheDir();
|
String tempPath = dir + "/temp_" + System.currentTimeMillis() + "_" + (long) (Math.random() * 100000000);
|
try {
|
|
try {
|
FileUtil.saveAsFileByte(b, tempPath);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
if (new File(tempPath).exists()) {
|
return uploadFile(new File(tempPath), key);
|
}
|
return null;
|
} finally {
|
if (new File(tempPath).exists())
|
new File(tempPath).delete();
|
}
|
}
|
}
|