腾讯云COS的快速接入

这篇具有很好参考价值的文章主要介绍了腾讯云COS的快速接入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

最近在研究一个剪贴板粘贴工具,实现粘贴图片,返回可访问的地址,这个在我的哔哩哔哩上有出一期视频🤭。但是,我发现部分博客平台不能正常的转载我的图片链接,于是研究了一下腾讯云的COS(阿里的叫OSS,最开始我还不知道腾讯云的叫COS🥹),想着其它平台应该可以转载这个在线的地址吧🤭。我的最终的效果如下:

腾讯云COS的快速接入,腾讯云,java,数据库

本期文章,我不会教大家如何的开通腾讯云的COS,如何去上传文件,我只会展示我觉得我代码设计的亮点,以及可以去分享的地方。不会如何对接的,参考COS python SDK文档

我的项目设计的亮点有:

  • 开发的密钥脱离代码,单独放在服务器上
  • 工具类的定义和代码分层
  • 可以提供本地使用(cmd命令行)

下边我将逐一分析。

亮点

开发的密钥脱离代码

按照我的常识,我们的代码中的配置项是固定的字符串的话,可以分为5种情况讨论,来看看程序员对代码的负责程度和写代码的规范性。

level one
Credit credit = new Credit("admin", "admin");

直接在代码里干,读过阿里巴巴《Java开发规范》的都知道,这出现了魔法值,不符合规范。

level two
private static final String USERNAME = "admin";
private static final String PASSWORD = "admin";

Credit credit = new Credit(USERNAME, PASSWORD);

用静态的常量写,摆脱了魔法值,方便修改。但是还是不优雅,业务类里边加上了配置的代码。而且,配置很散,配置项的堆积直接造成屎山的产生。

level three
public class AuthConfig {
  private String username = "admin";
  private String password = "admin";
}

public class Service {
  private AuthConfig config;
  
  // 省略业务逻辑
  Credit credit = new Credit(config.username, config.password);
}

现在舒服多了,配置项那么多,我都通过类来隔离了,要哪个导入哪个。但是,细心的或者说比较喜欢精益求精的你,这样安全吗?特别是具有特别高权限的账户密码,得到了是不是可以为所欲为了?

Level four

这一级别基本上懂点spring cloud的配置组件了,别提spring cloud config了,我用的是nacos,全称不要忘记了,namespace and config system。这一级别,很好的防治了为所欲为的产生,因为我有配置中心,稍微一管控,不是任何人都可以看到的。

nacos怎么用,自己百度去吧。看看yml文件:

auth:
	username: admin
	password: admin

java代码是这样的:

@ConfigurationProperties(prefix = "auth")
@Component
@Data
public class AuthConfig {
  private String username;
  private String password;
}

怎么样,是不是简单。记得用上lombok。除此之外,我还可以实现在nacos上的更改,我服务可以动态的获得新配置,不用重启服务!

level five

最后一级了,终极大招!安全度98%,除非开放了服务器的root访问权限。

这样,先看看代码,我用python写的,各种编程语言异曲同工。

class COSUtil():
    
    
    def __init__(self) -> NoReturn:
        config_file = os.path.expanduser('~') + '/.tencentcloud/tencent.json'
        if not os.path.isfile(config_file):
            raise FileNotFoundError
        with open(config_file, 'r') as file:
            config_data = json.load(file)
        if not config_data:
            raise ValueError('config file is empty')
        secret_id = config_data['SecretId']
        secret_key = config_data['SecretKey']
        self.default_bucket = config_data['defaultBucket']
        self.region = 'ap-shanghai'
        config = CosConfig(Region=self.region, SecretId=secret_id, SecretKey=secret_key)
        client = CosS3Client(config)
        self.client = client

巧妙点就在于我的配置文件完全在服务器,与代码无关。有人说:我的是docker容器部署的怎么办。怎么办?重学docker,docker的文件挂载忘啦。

OK,读取文件的内容,再转化成一个对象,根据key获得对应的配置。巧啊,妙啊,优雅。别问我怎么学到的,我看腾讯云的CDB sdk源码获得的。

是不是觉得很神奇,觉得神奇的话,记得点赞、在看、转发、关注哈

工具类的定义和代码分层

我的类定义和__init__初始化已经在上边罗列了。那我要上传文件怎么玩?直接一个方法安排上!

def upload_file_binary(self, filepath:str, bucket: Optional[str]= None, filename: Optional[str]= None) -> str:
        """二进制上传

        Args:
            filepath (str): _description_
            bucket (_type_, optional): _description_. Defaults to Optional[String].
            filename (_type_, optional): 文件名,可以指定在存储桶中的位置. Defaults to Optional[String].

        Raises:
            FileNotFoundError: _description_

        Returns:
            str: 文件的预览地址
        """
        if not os.path.isfile(filepath):
            raise FileNotFoundError
        key = filename or os.path.basename(filepath)
        with open(filepath, 'rb') as fp:
            self.client.put_object(
                Bucket= bucket or self.default_bucket,
                Body=fp,
                Key=key,
                StorageClass='STANDARD',
                EnableMD5=False
            )
        return self.get_preview_url(key)

说实话,自己都觉得巨优雅。方法上参数的类型约束、方法文档,我觉得都很无懈可击。直接调用我的方法就可以看到我的方法是干什么的,需要什么参数。

腾讯云COS的快速接入,腾讯云,java,数据库

cmd中使用

工具类的意义就是简化方法的调用,代码的耦合度。我很喜欢我的mac,可以给我提供linux的开发环境,让我各种倒腾。先看效果:

腾讯云COS的快速接入,腾讯云,java,数据库

是不是觉得很好用了。我本地只需要这样就可以上传图片获得文件的在线地址(预览地址)。

cos 文件的相对路径/绝对路径

怎么实现的呢?来看看:

if __name__ == '__main__':
    cosUtil = COSUtil()
    # print(cosUtil.list_buckets())
    print('upload local file to COS bucket')
    filepath = sys.argv[1]
    if not filepath or not os.path.isfile(filepath):
        raise FileExistsError(f'{filepath}')
    preview_path = cosUtil.upload_file_binary(filepath)
    print(f'successfully uploaded, preview_url: {preview_path}')

其实浓缩起来,一行代码就可以解决。

我另外需要配置一个alias,记得在.bash_profile中配置。不会这个文件的,建议百度学习一下。

alias cos="python3 xxxx/cos.py $*"

$*表示把控制台参数全部传递给python的__main__

至此,我的COS被我整的很nice了。文章来源地址https://www.toymoban.com/news/detail-646777.html

到了这里,关于腾讯云COS的快速接入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 🔥🔥Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(76)
  • Java开发者的Python快速实战指南:探索向量数据库之图像相似搜索-文字版

    首先,我要向大家道个歉。原本我计划今天向大家展示如何将图片和视频等形式转换为向量并存储在向量数据库中,但是当我查看文档时才发现,腾讯的向量数据库尚未完全开发完成。因此,今天我将用文本形式来演示相似图片搜索。如果您对腾讯的产品动态不太了解,可以

    2024年02月05日
    浏览(82)
  • springboot项目接入Oracle数据库配置

    2024年01月23日
    浏览(42)
  • 腾讯云-宝塔添加MySQL数据库

    1. 数据库菜单 2. 添加数据库 3. 数据库添加成功  4. 上传数据库文件   5. 导入数据库文件 6. 开启数据库权限 7. 添加安全组 (宝塔/腾讯云) 8. Navicat 连接成功

    2024年02月14日
    浏览(58)
  • openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

    102.1 背景信息 当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。 全局的最大连接数:由运行参数max_connections指定。 某用户的连接数:在创建用户时

    2024年02月07日
    浏览(59)
  • 《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源

    腾讯云向量数据库 SDK 宣布正式开源。根据介绍,腾讯云向量数据库(Tencent Cloud VectorDB)的 Python SDK 与 Java SDK 是基于数据库设计模型,遵循 HTTP 协议,将 API 封装成易于使用的 Python 与 Java 函数或类,为开发者提供了更加友好、更加便捷的数据库使用和管理方式。 腾讯云向量

    2024年02月10日
    浏览(53)
  • 腾讯云数据库 TDSQL—— 私有云安装部署手册

    目录 基础环境说明 TDSQL 集群架构设计 基础部署 1.配置主机名 2.添加主机名IP映射 3.开启时间同步 4.规划存储目录 TDSQL下载 TDSQL配置 1.配置免密登录 2.修改tdsql_hosts文件 3.配置tdsql密码 4.修改ansible变量 5.安装ansible TDSQL安装 赤兔初始化 1.环境检测 2.集群配置 3.集群初始化 4.新增

    2024年02月13日
    浏览(44)
  • 《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景

    腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模

    2024年02月14日
    浏览(49)
  • 腾讯云向量数据库正式对外全量开放公测

    11月1日,腾讯云对外宣布向量数据库正式全量开放公测,同时性能层面带来巨大提升。腾讯云数据库副总经理罗云表示,除了公测之外,腾讯云向量数据库单索引已经支持百亿级向量规模,支持百万级QPS毫秒级查询延迟,领先行业平均水平1.5倍以上,计算成本低于行业水平

    2024年02月06日
    浏览(45)
  • HTAP for MySQL 在腾讯云数据库的演进

    摘要:MySQL在充分利用多核计算资源方面比较欠缺,无法同时满足在线业务和分析型业务的客户需求,而单独部署一套专用的分析型数据库意味着额外的成本和复杂的数据链路。本次主题将介绍腾讯云数据库为满足此类场景而在HTAP for MySQL产品方面进行的尝试。 2023首届云数据

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包