| | |
| | | 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 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;
|
| | | }
|
| | |
|
| | | 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);
|
| | |
|
| | | return new FileUploadResult(String.format("http://%s.file.myqcloud.com%s", totalBucketName, 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 deleteFile(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 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();
|
| | | }
|
| | | }
|
| | | }
|
| | | 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 deleteFile(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 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(); |
| | | } |
| | | } |
| | | } |