admin
2022-03-28 2f5935ed11672046c37f733d855214f6147b4b58
utils/src/main/java/org/yeshi/utils/tencentcloud/COSManager.java
@@ -1,224 +1,231 @@
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();
        }
    }
}