• 腾讯云对象存储的在Java使用步骤介绍


    腾讯云对象存储的在Java使用步骤介绍

    创建一个腾讯云的账户

    这个自己去创建,然后开通对象存储服务,如下

    img

    有了账号就要创建一个对象存储的桶,也就是存储对象的一个容器

    如果你想只有自己放存放的就设置 私有读写 ,如果想用网络直接访问那就是 公有读私有写(虽然后期,可以改,但是还是这里直接设置读写权限,不然后期改很麻烦,还要设置啥消息模板,真离谱,我想设置然后还要开通业务,服了)

    img

    写了名称,访问权限就可以下一步了

    当然要点击同意他的条款

    img

    上面这里我都是默认的,只点击了免费的版本控制。

    下一步就直接可以创建了,就是展示一下你的选配而且

    后买就是如何使用啦!

    下面是 java 的案例

    虽然官方推荐临时密钥,但是优点烦,如果是日常调试,我自己就是直接用了密钥了。

    package com.five_dog_cat.backend;
    
    import com.qcloud.cos.utils.Jackson;
    import com.tencent.cloud.CosStsClient;
    import com.tencent.cloud.Policy;
    import com.tencent.cloud.Response;
    import com.tencent.cloud.Statement;
    
    import java.util.TreeMap;
    
    public class GetTempAllowForTXCos {
        // 根据 github 提供的 maven 集成方法导入 java sts sdk,使用 3.1.jpg.1.jpg 及更高版本
        public static void main(String[] args) {
            TreeMap<String, Object> config = new TreeMap<String, Object>();
            try {
                //这里的 SecretId 和 SecretKey 代表了用于申请临时密钥的永久身份(主账号、子账号等),子账号需要具有操作存储桶的权限。
                String secretId = "";//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
                String secretKey = "";//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
                // 替换为您的云 api 密钥 SecretId
                config.put("secretId", secretId);
                // 替换为您的云 api 密钥 SecretKey
                config.put("secretKey", secretKey);
    
                // 初始化 policy
                Policy policy = new Policy();
    
                // 设置域名:
                // 如果您使用了腾讯云 cvm,可以设置内部域名
                //config.put("host", "sts.internal.tencentcloudapi.com");
    
                // 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒
                config.put("durationSeconds", 1800);
                // 换成您的 bucket
                config.put("bucket", "fwwb2024-1317992681");
                // 换成 bucket 所在地区
                config.put("region", "ap-shanghai");
    
                // 开始构建一条 statement
                Statement statement = new Statement();
                // 声明设置的结果是允许操作
                statement.setEffect("allow");
                /**
                 * 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
                 * 权限列表请参见 https://cloud.tencent.com/document/product/436/31923
                 * 规则为 {project}:{interfaceName}
                 * project : 产品缩写  cos相关授权为值为cos,数据万象(数据处理)相关授权值为ci
                 * 授权所有接口用*表示,例如 cos:*,ci:*
                 * 添加一批操作权限 :
                 */
                statement.addActions(new String[]{
                        "cos:PutObject",
                        // 表单上传、小程序上传
                        "cos:PostObject",
                        // 分块上传
                        "cos:InitiateMultipartUpload",
                        "cos:ListMultipartUploads",
                        "cos:ListParts",
                        "cos:UploadPart",
                        "cos:CompleteMultipartUpload",
                        // 处理相关接口一般为数据万象产品 权限中以ci开头
                        // 创建媒体处理任务
                        "ci:CreateMediaJobs",
                        // 文件压缩
                        "ci:CreateFileProcessJobs"
                });
    
                /**
                 * 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径
                 * 资源表达式规则分对象存储(cos)和数据万象(ci)两种
                 * 数据处理、审核相关接口需要授予ci资源权限
                 *  cos : qcs::cos:{region}:uid/{appid}:{bucket}/{path}
                 *  ci  : qcs::ci:{region}:uid/{appid}:bucket/{bucket}/{path}
                 * 列举几种典型的{path}授权场景:
                 * 1.jpg、允许访问所有对象:"*"
                 * 2、允许访问指定的对象:"a/a1.txt", "b/b1.txt"
                 * 3、允许访问指定前缀的对象:"a*", "a/*", "b/*"
                 *  如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。
                 *
                 * 示例:授权examplebucket-1250000000 bucket目录下的所有资源给cos和ci 授权两条Resource
                 */
                statement.addResources(new String[]{
                        "qcs::cos:ap-shanghai:uid/1317992681:fwwb2024-1317992681/*",
                        "qcs::ci:ap-shanghai:uid/1317992681:bucket/fwwb2024-1317992681/*"
                });
    
                // 把一条 statement 添加到 policy
                // 可以添加多条
                policy.addStatement(statement);
                // 将 Policy 示例转化成 String,可以使用任何 json 转化方式,这里是本 SDK 自带的推荐方式
                config.put("policy", Jackson.toJsonPrettyString(policy));
    
                Response response = CosStsClient.getCredential(config);
                System.out.println(response.credentials.tmpSecretId);
                System.out.println("-----");
                System.out.println(response.credentials.tmpSecretKey);
                System.out.println("-----");
                System.out.println(response.credentials.sessionToken);
            } catch (Exception e) {
                e.printStackTrace();
                throw new IllegalArgumentException("no valid secret !");
            }
        }
    }
    
    • 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
    上传的DEMO

    这里用的是临时密钥,从上面的代码通过获取的来的。

    package com.five_dog_cat.backend;// 根据 github 提供的 maven 集成方式导入 cos xml java sdk
    
    import com.qcloud.cos.COSClient;
    import com.qcloud.cos.ClientConfig;
    import com.qcloud.cos.auth.BasicSessionCredentials;
    import com.qcloud.cos.auth.COSCredentials;
    import com.qcloud.cos.exception.CosClientException;
    import com.qcloud.cos.exception.CosServiceException;
    import com.qcloud.cos.model.ObjectMetadata;
    import com.qcloud.cos.model.PutObjectRequest;
    import com.qcloud.cos.model.PutObjectResult;
    import com.qcloud.cos.region.Region;
    
    import java.io.File;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
    
            // 用户基本信息
            String tmpSecretId = "--OIb-sB";   // 替换为 STS 接口返回给您的临时 SecretId
            String tmpSecretKey = "/OrY7ykx/=";  // 替换为 STS 接口返回给您的临时 SecretKey
            String sessionToken = "---6ui-G5EJ-XC9Suz0L--------jNT-";
            // 1.jpg 初始化用户身份信息(secretId, secretKey)
            COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
            // 2 设置 bucket 区域,详情请参见 COS 地域 https://cloud.tencent.com/document/product/436/6224
            ClientConfig clientConfig = new ClientConfig(new Region("ap-shanghai"));
            // 3 生成 cos 客户端
            COSClient cosclient = new COSClient(cred, clientConfig);
            // bucket 名需包含 appid
            String bucketName = "fwwb2024-1317992681";
    
    
            // 上传 object, 建议 20M 以下的文件使用该接口
            File localFile = new File("1.jpg");
            String key =localFile.getName();
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,key, localFile);
    
            // 设置 x-cos-security-token header 字段
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setSecurityToken(sessionToken);
            putObjectRequest.setMetadata(objectMetadata);
    
            try {
                PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
                // 成功:putobjectResult 会返回文件的 etag
                String etag = putObjectResult.getETag();
                System.out.println(etag);
            } catch (CosServiceException e) {
                //失败,抛出 CosServiceException
                e.printStackTrace();
            } catch (CosClientException e) {
                //失败,抛出 CosClientException
                e.printStackTrace();
            }
    
            // 关闭客户端
            cosclient.shutdown();
    
        }
    }
    
    • 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
    下载DEMO

    这里我是直接使用密钥,因为用临时的时候总是说权限不够,很烦,就直接换了。

    package com.five_dog_cat.backend;
    
    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.http.HttpProtocol;
    import com.qcloud.cos.model.COSObject;
    import com.qcloud.cos.model.COSObjectInputStream;
    import com.qcloud.cos.model.GetObjectRequest;
    import com.qcloud.cos.model.ObjectMetadata;
    import com.qcloud.cos.region.Region;
    
    import java.io.File;
    import java.io.IOException;
    
    public class Demo1 {
        public static void main(String[] args) throws IOException {
    // 1 初始化用户身份信息(secretId, secretKey)。
    // SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
            String secretId = "";//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
            String secretKey ="";//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
            COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
    // 2 设置 bucket 的地域, COS 地域的简称请参见 https://cloud.tencent.com/document/product/436/6224
    // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
            Region region = new Region("ap-shanghai");
            ClientConfig clientConfig = new ClientConfig(region);
    // 这里建议设置使用 https 协议
    // 从 5.6.54 版本开始,默认使用了 https
            clientConfig.setHttpProtocol(HttpProtocol.https);
    // 3 生成 cos 客户端。
            COSClient cosClient = new COSClient(cred, clientConfig);
            // Bucket 的命名格式为 BucketName-APPID ,此处填写的存储桶名称必须为此格式
            String bucketName = "";
    // 指定文件在 COS 上的路径,即对象键。例如对象键为 folder/picture.jpg,则表示下载的文件 picture.jpg 在 folder 路径下
            String key = "/1.jpg";
    // 方法1 获取下载输入流
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
            COSObject cosObject = cosClient.getObject(getObjectRequest);
            COSObjectInputStream cosObjectInput = cosObject.getObjectContent();
    // 下载对象的 CRC64
            String crc64Ecma = cosObject.getObjectMetadata().getCrc64Ecma();
    // 关闭输入流
            cosObjectInput.close();
    
    // 方法2 下载文件到本地的路径,例如 把文件下载到本地的 /path/to/路径下的localFile文件中
            String outputFilePath = ""; //这个要是一个文件。
            File downFile = new File(outputFilePath);
            getObjectRequest = new GetObjectRequest(bucketName, key);
            ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest,downFile);
        }
    }
    
    • 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

    官方的SDK地址:https://cloud.tencent.com/document/product/436/6474

  • 相关阅读:
    C语言——指针(函数)
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
    做闲鱼如何提升曝光量?
    C++基础面试题 | 什么是C++中的虚继承?
    SpringCloud微服务技术栈-什么是Docker?怎么安装Docker?
    部分聚合平台“真自营 假聚合”?专家:扰乱市场公平秩序
    1859. 将句子排序
    空间参考简介
    Centos7 系统开通后修改数据盘挂载目录
    spinning
  • 原文地址:https://blog.csdn.net/Go_ahead_forever/article/details/136746211