腾讯云COS对象存储的简单使用

  叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的高清大图上去,现将其上传的简单使用步骤总结一波(其它操作参加官方SDK文档API)。

说明:这里叮当哥使用的是生成临时密钥的方式(好处多多哦)

第一步:创建Maven工程并导入相关坐标

<!-- 1.添加腾讯云指定的仓库地址 -->
    <repositories>
        <repository>
            <id>bintray-qcloud-maven-repo</id>
            <name>qcloud-maven-repo</name>
            <url>https://dl.bintray.com/qcloud/maven-repo/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- 2.腾讯云sdk的 -->
        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.5.3</version>
        </dependency>
        <!-- 2.获取临时秘钥的 -->
        <dependency>
            <groupId>com.tencent.cloud</groupId>
            <artifactId>cos-sts-java</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!-- 3.json处理包的 -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
    </dependencies>

第二步:创建腾讯云cos服务器的配置文件(tencent.properties)

# 这些配置在腾讯云控制台都可查到(使用时替换为你自己的)
# 腾讯云的SecretId(永久的,可在控制台开启或关闭)
tencent.SecretId=Dug3RhGtKp8Df4FgAKt7H1ivGH7kfDiJ6UEo
# 腾讯云的SecretKey(永久的,可在控制台开启或关闭)
tencent.SecretKey=cGUanub0FYl9pQmpkU3YpyRpB93NdBXf
# 腾讯云的bucket (存储桶)
tencent.bucket=dintalk-1228321366
# 腾讯云的region(bucket所在地区)
tencent.region=ap-beijing
# 腾讯云的allowPrefix(允许上传的路径)
tencent.allowPrefix=*
# 腾讯云的临时密钥时长(单位秒)
tencent.durationSeconds=1800
# 腾讯云的访问基础链接:
tencent.baseUrl= https:/dintalk-1228321366.cos.ap-beijing.myqcloud.com/

第三步:创建腾讯cos上传工具类

package cn.dintalk.util;

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.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 com.tencent.cloud.CosStsClient;
import org.json.JSONObject;

import java.io.File;
import java.util.ResourceBundle;
import java.util.TreeMap;

/**
 * 腾讯云cos服务器上传工具类
 * @author Mr.song
 * @date 2019/06/08 20:52
 */
public class TencentUploadUtil {

    //腾讯云的SecretId
    private static String secretId;
    //腾讯云的SecretKey
    private static String secretKey;
    //腾讯云的bucket (存储桶)
    private static String bucket;
    //腾讯云的region(bucket所在地区)
    private static String region;
    //腾讯云的allowPrefix(允许上传的路径)
    private static String allowPrefix;
    //腾讯云的临时密钥时长(单位秒)
    private static String durationSeconds;
    //腾讯云的访问基础链接:
    private static String baseUrl;
    //读取配置文件,初始化配置
    static {
        ResourceBundle bundle = ResourceBundle.getBundle("properties/tencent");
        secretId = bundle.getString("tencent.SecretId");
        secretKey = bundle.getString("tencent.SecretKey");
        bucket = bundle.getString("tencent.bucket");
        region = bundle.getString("tencent.region");
        allowPrefix = bundle.getString("tencent.allowPrefix");
        durationSeconds = bundle.getString("tencent.durationSeconds");
        baseUrl = bundle.getString("tencent.baseUrl");
    }

    /**
     * 上传文件
     *
     * @param path 文件服务器下的根路径,即key,如: doc/picture.jpg
     * @param file
     * @return 成功返回文件路径,失败返回null
     */
    public static String uploadFile(String path, File file) {
        //获取临时密钥
        JSONObject temp = getTempKey();
        // 用户基本信息:解析临时密钥中的相关信息
        String tmpSecretId = temp.getJSONObject("credentials").getString("tmpSecretId");
        String tmpSecretKey = temp.getJSONObject("credentials").getString("tmpSecretKey");
        String sessionToken = temp.getJSONObject("credentials").getString("sessionToken");  

        // 1 初始化用户身份信息(secretId, secretKey)
        COSCredentials cred = new BasicCOSCredentials(tmpSecretId, tmpSecretKey);
        // 2 设置 bucket 区域
        ClientConfig clientConfig = new ClientConfig(new Region(region));
        // 3 生成 cos 客户端
        COSClient cosclient = new COSClient(cred, clientConfig);
        // bucket名需包含appid
        String bucketName = bucket;
        // 上传 object, 建议 20M 以下的文件使用该接口
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, path, file);
        // 设置 x-cos-security-token header 字段
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setSecurityToken(sessionToken);
        putObjectRequest.setMetadata(objectMetadata);
        String rtValue = null;
        try {
            PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
            // 成功:putobjectResult 会返回文件的 etag
            String etag = putObjectResult.getETag();
            rtValue = baseUrl + path;
        } catch (CosServiceException e) {
            //失败,抛出 CosServiceException
            e.printStackTrace();
        } catch (CosClientException e) {
            //失败,抛出 CosClientException
            e.printStackTrace();
        } finally {
            // 关闭客户端
            cosclient.shutdown();
            //返回文件的网络访问url
            return rtValue;
        }
    }

    /**
     * 生成临时密钥
     *
     * @return
     */
    private static JSONObject getTempKey() {
        TreeMap<String, Object> config = new TreeMap<String, Object>();
        try {//使用永久密钥生成临时密钥
            config.put("SecretId", secretId);
            config.put("SecretKey", secretKey);
            config.put("durationSeconds", Integer.parseInt(durationSeconds));
            config.put("bucket", bucket);
            config.put("region", region);
            config.put("allowPrefix", allowPrefix);
            //密钥的权限列表,其他权限列表请看
            //https://cloud.tencent.com/document/product/436/31923
            String[] allowActions = new String[]{
                    // 简单上传
                    "name/cos:PutObject",
                    // 表单上传、小程序上传
                    "name/cos:PostObject",
                    // 分片上传
                    "name/cos:InitiateMultipartUpload",
                    "name/cos:ListMultipartUploads",
                    "name/cos:ListParts",
                    "name/cos:UploadPart",
                    "name/cos:CompleteMultipartUpload"
            };
            config.put("allowActions", allowActions);
            JSONObject credential = CosStsClient.getCredential(config);
            //成功返回临时密钥信息,如下打印密钥信息
            System.out.println(credential);
            return credential;
        } catch (Exception e) {
            //失败抛出异常
            throw new IllegalArgumentException("no valid secret !");
        }
    }
}

Tips:如果整合Spring,读取配置可以使用注解的方式哦

  • 类上 @PropertySource("classpath:properties/tencent.properties") ,
  • 属性上 @Value(“{tencent.SecretId}”)。

第四步:测试上传一张图片

import cn.dintalk.util.TencentUploadUtil;
import java.io.File;

/**
 * 测试文件上传
 * @author Mr.song
 * @date 2019/06/08 21:58
 */
public class TestUpload {
    public static void main(String[] args) {
        //1.创建文件
        File file = new File("C:\\Users\\Administrator\\Desktop\\2.jpg");
        //2.调用方法,传入要在服务器上保存的目录及文件名    和  文件
        TencentUploadUtil.uploadFile("dintalk/image/2.jpg",file);
    }
}

如此,高清大图就从桌面上愉快的转移到了腾讯云上啦!

关注微信公众号, 随时随地学习

原文地址:https://www.cnblogs.com/dintalk/p/10999396.html

时间: 2024-08-02 07:48:28

腾讯云COS对象存储的简单使用的相关文章

腾讯云cos对象存储服务文件上传api就是一个大坑

一.介绍 对象存储服务(Cloud Object Service)是基于腾讯多年海量服务经验,对外提供的可靠.安全.易用的海量存储服务.提供多样化接入方式,以及全国部署的上传加速集群,可以无缝衔接CDN进行加速下载. 二.cos 文件上传api源码 /** * 单个文件上传,适用于小文件 * * @param bucketName * bucket名称 * @param remotePath * 远程文件路径 * @param localPath * 本地文件路径 * @return 服务器端返

PHP 腾讯云cos使用之我见

因为某些人的原因,本文从新改名发布一遍. 原名称:tp5 -- 腾讯云cos简单使用 原文链接:https://www.cnblogs.com/YFYQ/p/10840050.html 因项目需要,本来是需要对接阿里云oss,但因客户错误将云存储买成腾讯云cos,因此简单做了个对象上传使用 首先下载cos的sdk: 三种方式在文档上面都有介绍 SDK 安装有三种方式:Composer 方式.Phar 方式 和 源码方式. 本渣用的是最low 的源码方式 下载完成后解压放至TP5的第三方类库ext

利用腾讯云COS云对象存储定时远程备份网站

版权声明:本文由张戈 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/942851001487125915 来源:腾云阁 https://www.qcloud.com/community 一.优点分析 内网传输:和阿里云OSS一样,腾讯云COS同样支持内网和外网文件传输,对于腾讯云服务器,使用内网传输绝对是最快.最稳定的备份方案! 免费方案:看了下腾讯云COS的定价说明,发现对于备份网站来说简直是绝佳搭档,甚至可以说是钻

微信小程序/网站 上传图片到腾讯云COS

COS简介: 腾讯云提供的一种对象存储服务,供开发者存储海量文件的分布式存储服务.可以将自己开发的应用的存储部分全部接入COS的存储桶中,有效减少应用服务器的带宽,请求等.个人也可以通过腾讯云账号免费使用COS6个月,https://cloud.tencent.com/product/cos 整体流程简介:  1. 前端引入cos的SDK文件 2. 监听上传控件,并在图片加载至网页临时流中发起签名请求 3.后端根据上传的请求方式和路径参数返回签名Authorization和token XCosS

阿里云OSS和腾讯云COS互相迁移

利用阿里.腾讯的帮助文档中提供的迁移工具测试迁移对象存储数据. 一.腾讯to阿里文档链接:https://help.aliyun.com/document_detail/56990.html?spm=5176.7851628.6.1079.UqBdXKOssImport工具可以将本地.其它云存储的数据迁移到OSS,它有以下特点: 支持的丰富的数据源,有本地.七牛.百度BOS.AWS S3.Azure Blob.又拍云.腾讯云COS.金山KS3.HTTP.OSS等,并可根据需要扩展:支持断点续传:

腾讯云COS请求签名C#版

网上没有找到C#版 的签名代码,只好去一字一字的读SDK文档,自己写了一个,没有在CSDN搞什么积分下载,写的不好勿喷,能用点个赞再走. 空参和空的请求头是通过了与官方网的验证了,没有问题,可以直接下载COS中的文件.如果要带参,带头就自己试一下,如有有错告诉我一下再走. 文件名没有做过中文名的,我没有打算存中文的文件名,所以没有字符串特殊处理,用最简单的方式达到目的. using System; using System.Collections.Generic; using System.Co

iOS使用阿里云OSS对象存储 (SDK 2.1.1)

最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所调用的方法差别较大(自我感觉),当然原理都一样.所以看了两天SDK,自己封装了几个常用的方法. 一.OSS简单介绍 OSS是提供非结构化数据存取的服务,非结构化数据一般包括图片.文档.音频.视频等一些文件.OSS提供了接口,开发者可以通过这些接口对数据进行上传或下载等操作. 开通OSS服务后,创建一

腾讯云COS Api版本(不使用sdk)工具类

上一篇博文实现了阿里云OSS Api版本简单的上传和下载功能,这篇文章介绍腾讯云COS Api版本的上传下载功能 官方文档:https://cloud.tencent.com/document/product/436/7751 工具类代码: import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.d

关于调接口和腾讯云cos方面。

腾讯云的cos js jdk那个文档使用说明不好用. 都没看懂,而且图片上传也没有具体的详细.对于新手来说强制使用这个,弄得自己一头雾水. 工作效率就会下降. 为此我在网上搜了对象存储cos的常见错误. 对象存储COS常见问题大集结(2016年4月5日) 对象存储服务 PHp jquery基于cos上传头像组件 说真的全部都是php. 如果公司没有php,那用cos会出好多问题而且解决的时间成本太高. 为此我抱怨一下 作为前端我真的很不合格,如果没有后端,前端做这个腾讯cos什么都做不了.