admin
2020-09-02 ab141df783309d4a704f7b7d20aa465bf42ed371
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.yeshi.buwan.util;
 
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 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.PutObjectRequest;
import com.qcloud.cos.region.Region;
 
public class COSManager {
    static long appId = 1255749512L;
    static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25";
    static String secretKey = "xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo";
    // 设置要操作的bucket
    static String bucketName = "buwan";
    static COSClient cosClient;
    static String totalBucketName = "";
 
    static {
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
        cosClient = new COSClient(cred, clientConfig);
        // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
        totalBucketName = bucketName + "-" + appId;
    }
 
    static COSManager instance;
 
    public static COSManager getInstance() {
        if (instance == null)
            instance = new COSManager();
        return instance;
    }
 
    public String uploadFile(File f, String key) {
        if (key != null && !key.startsWith("/"))
            key = "/" + key;
        PutObjectRequest putObjectRequest = new PutObjectRequest(totalBucketName, key, f);
        try {
            cosClient.putObject(putObjectRequest);
            return String.format("http://%s.file.myqcloud.com%s", totalBucketName, key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
 
    public String 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();
        }
    }
 
    // 文件是否存在
    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;
    }
 
}