【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
- 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- 一.概念介绍
- 1.什么是对象存储
- 2.产品优势
- 3.应用场景
- 二.基础信息
- 1.obs 概览
- 2.obs 主页
- 3.存储包和流量包的区别
- 4.购买服务
- 5.PicGo 配置 OBS
- 三.Python-SKD
- 1.安装依赖
- 2..列举桶对象
- 3.下载图片
一.概念介绍
1.什么是对象存储
对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
OBS 系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS 是一项面向 Internet 访问的服务,提供了基于 HTTP/HTTPS 协议的 Web 服务接口,用户可以随时随地连接到 Internet,通过 OBS 管理控制台或各种 OBS 工具访问和管理存储在 OBS 中的数据。此外,OBS 支持 SDK 和 OBS API 接口,可使用户方便管理自己存储在 OBS 上的数据,以及开发多种类型的上层业务应用。
在全球多区域部署了 OBS 基础设施,具备高度的可扩展性和可靠性,用户可根据自身需要指定区域使用 OBS,由此获得更快的访问速度和实惠的服务价格。
2.产品优势
在信息时代,企业数据直线增长,自建存储服务器存在诸多劣势,已无法满足企业日益强烈的存储需求。表 1向您详细展示了 OBS 与自建存储服务器的优劣势对比。
| 对比项 | OBS | 自建存储服务器 |
|---|---|---|
| 数据存储量 | 提供海量的存储服务,在全球部署着 N 个数据中心,所有业务、存储节点采用分布式集群方式部署,各节点、集群都可以独立扩容,用户永远不必担心存储容量不够。 | 数据存储量受限于搭建存储服务器时使用的硬件设备,存储量不够时需要重新购买存储硬盘,进行人工扩容。 |
| 安全性 | 支持 HTTPS/SSL 安全协议,支持数据加密上传。同时 OBS 通过访问密钥(AK/SK)对访问用户的身份进行鉴权,结合 IAM 权限、桶策略、ACL、防盗链等多种方式和技术确保数据传输与访问的安全。支持敏感操作保护,针对删除桶等敏感操作,可开启身份验证。 | 需自行承担网络信息安全、技术漏洞、误操作等各方面的数据安全风险。 |
| 可靠性 | 通过五级可靠性架构,保障数据持久性高达 99.9999999999%,业务连续性高达 99.995%,远高于传统架构。 | 一般的企业自建存储服务器不会投入巨额的成本来同时保证介质、服务器、机柜、数据中心、区域级别的可靠性,一旦出现故障或灾难,很容易导致数据出现不可逆的丢失,给企业造成严重损失。 |
| 成本 | 即开即用,免去了自建存储服务器前期的资金、时间以及人力成本的投入,后期设备的维护交由 OBS 处理。按使用量付费,用多少算多少。阶梯价格,用的越多越实惠。 | 前期安装难、设备成本高、初始投资大、自建周期长、后期运维成本高,无法匹配快速变更的企业业务,安全保障的费用还需额外考虑。 |
3.应用场景
OBS 提供的大数据解决方案主要面向海量数据存储分析、历史数据明细查询、海量行为日志分析和公共事务分析统计等场景,向用户提供低成本、高性能、不断业务、无须扩容的解决方案。
- 海量数据存储分析的典型场景:PB 级的数据存储,批量数据分析,毫秒级的数据详单查询等
- 历史数据明细查询的典型场景:流水审计,设备历史能耗分析,轨迹回放,车辆驾驶行为分析,精细化监控等
- 海量行为日志分析的典型场景:学习习惯分析,运营日志分析,系统操作日志分析查询等
- 公共事务分析统计的典型场景:犯罪追踪,关联案件查询,交通拥堵分析,景点热度统计等
用户通过 DES 等迁移服务将海量数据迁移至 OBS,再基于提供的 MapReduce 等大数据服务或开源的 Hadoop、Spark 等运算框架,对存储在 OBS 上的海量数据进行大数据分析,最终将分析的结果呈现在 ECS 中的各类程序或应用上。
二.基础信息
1.obs 概览
obs 概览

2.obs 主页
主页地址
对象存储服务 OBS
提供安全稳定、性能领先、无限弹性扩展的存储能力,降低使用成本,驱动千行百业数据价值变现

3.存储包和流量包的区别
存储包和流量包是两种不同的服务产品,通常用于云计算服务中。它们的主要区别在于服务的内容和用途。
存储包主要是指用于抵扣云存储服务中数据存储费用的产品。例如,在华为云对象存储 OBS 服务中,存储包可以用来抵扣 OSS 文件或 ECS 快照的存储费用 。用户购买存储包后,在有效期内,存储包会按照一定的规格(如每小时固定额度)抵扣相应的存储费用。如果存储使用量超出了存储包的抵扣额度,超出部分将按照按量付费的方式计算费用。
流量包则是指用于抵扣数据传输过程中产生的流量费用的产品。流量包可以进一步细分为多种类型,例如下行流量包、回源流量包等。下行流量包用于抵扣从云存储服务向外网传输数据产生的流量费用,而回源流量包则用于抵扣数据从云存储服务传输到内容分发网络(CDN)边缘节点产生的流量费用 。流量包通常有预设的有效期和额度,用户在使用过程中,相应的流量费用会被流量包抵扣,超出额度则按实际用量计费。
4.购买服务
存储包和流量包的区别
存储包:华为云 obs 存储包还是比较便宜的,40G 一年只要 9 元

流量包:华为云流量包一年 50G 流量,一年价格为 108 元

5.PicGo 配置 OBS
根据下图在 picgo 中配置 obs,我们就可以管理自己的图床了,再结合 typora,使博客对于图片的管理更加方便

三.Python-SKD
1.安装依赖
pip install pycryptodome==3.20.0pip install esdk-obs-python --trusted-host pypi.org
2…列举桶对象
列举桶对象 API
100 个以内对象:
from obs import ObsClient
import os
import traceback# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
# 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。
ak = 'ak'
sk = 'sk'
server = "https://obs.cn-east-3.myhuaweicloud.com"
# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:bucketName = "kwan1"# 指定列举对象的前缀# prefix = 'test/'prefix = None# 指定单次列举对象个数为100max_keys = 100# 列举桶内对象resp = obsClient.listObjects(bucketName, prefix, max_keys=max_keys, encoding_type='url')# 返回码为2xx时,接口调用成功,否则接口调用失败if resp.status < 300:# print('List Objects Succeeded')# print('requestId:', resp.requestId)# print('name:', resp.body.name)# print('prefix:', resp.body.prefix)# print('max_keys:', resp.body.max_keys)# print('is_truncated:', resp.body.is_truncated)index = 1for content in resp.body.contents:# print('object [' + str(index) + ']')print('key:', content.key)# print('lastModified:', content.lastModified)# print('etag:', content.etag)# print('size:', content.size)# print('storageClass:', content.storageClass)# print('owner_id:', content.owner.owner_id)# print('owner_name:', content.owner.owner_name)index += 1else:# print('List Objects Failed')print('requestId:', resp.requestId)print('errorCode:', resp.errorCode)print('errorMessage:', resp.errorMessage)
except:print('List Objects Failed')print(traceback.format_exc())
100个以上:
from obs import ObsClient
import os
import tracebackak = 'ak'
sk = 'sk'
server = "https://obs.cn-east-3.myhuaweicloud.com"
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:max_num = 1000mark = Noneindex = 1while True:resp = obsClient.listObjects('kwan1', marker=mark, max_keys=max_num, encoding_type='url')if resp.status < 300:# print('requestId:', resp.requestId)# print('name:', resp.body.name)# print('prefix:', resp.body.prefix)# print('max_keys:', resp.body.max_keys)# print('is_truncated:', resp.body.is_truncated)for content in resp.body.contents:# print('object [' + str(index) + ']')print('key:', content.key)# print('lastModified:', content.lastModified)# print('etag:', content.etag)# print('size:', content.size)# print('storageClass:', content.storageClass)# print('owner_id:', content.owner.owner_id)# print('owner_name:', content.owner.owner_name)print(f'index:{index}')index += 1if resp.body.is_truncated is True:mark = resp.body.next_markerelse:breakelse:print('errorCode:', resp.errorCode)print('errorMessage:', resp.errorMessage)
except:import tracebackprint(traceback.format_exc())
3.下载图片
import requests# 图片的URL
image_url = 'https://kwan1.obs.cn-east-3.myhuaweicloud.com/zsb4UftyA5gKCQ8.png'# 使用rfind找到最后一个'/'的位置
last_slash_index = image_url.rfind('/')# 从'/'后面截取字符串作为图片名称
if last_slash_index != -1:image_name = image_url[last_slash_index + 1:]
else:image_name = image_url # 如果没有找到'/',则整个URL就是图片名称print(image_name)# 打开URL
response = requests.get(image_url, stream=True)# 确保请求成功
if response.status_code == 200:# 打开一个文件用于写入with open(image_name, 'wb') as out_file:# 写入内容out_file.write(response.content)
else:print('图片下载失败,状态码:', response.status_code)
觉得有用的话点个赞
👍🏻呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
相关文章:
【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
IIC协议
一、IIC协议 1.1 IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS(飞利浦)公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式 特点 简单性和有效性。 由于接口直接在组件之上,…...
如何在linux系统上部署nginx
1)首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2)然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3)执行 tar -zxvf nginx-1.23…...
香港网站服务器抵御恶意攻击的一些措施
香港网站服务器因为在互联网中扮演着重要的角色,因此也在面临着网络中各种恶意攻击的威胁,为了确保香港网站服务器的安全和稳定运行,可以通过安全措施来进行防御,本文就来分享一些香港网站服务器来抵御恶意攻击的关键措施。 一、网…...
实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)
https://wiki.onedayxyy.cn/docs/filesite.io-photot-install-full...
美团到店面经
redis中大key引起的问题 1、阻塞请求 Big Key对应的value较大,我们对其进行读写的时候,需要耗费较长的时间,这样就可能阻塞后续的请求处理。Redis的核心线程是单线程,单线程中请求任务的处理是串行的,前面的任务完不成…...
【CSS入门】第五课 - font字体
这一节,我们说一说font这个字体。做网页开发,网页中几乎不可能没有文字的,为了使网页更漂亮,用户体验更好。人们可算是绞尽脑汁,其中一部分就是在字体上下的大功夫。 接下来,我们学习一下,font…...
STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
1、门电路 门电路组成简单加法器: 二进制对电路的影响: 0和1代表无和有; 以下图例,演示与门:左1右1输出1; 电平标准:使用不同的电压表示数字0和1; 高电平:1࿱…...
【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
整数拆分 题目🔗 题目描述 给定一个正整数 n ,将其拆分为 k个正整数的和(k > 2),并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。 思路分析 dp数组含义:dp[i]表示整数i拆分后的最大乘积。…...
网页上预览Excel文件
如何运行: 需要发布在服务器 如Tomcat 实例图片: 需要展示的文件: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>excel预览</title><link rel"stylesheet" href"…...
Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
在本文中,我们将介绍如何在两种敌人行为之间切换。本文是前两篇文章的延续,分别介绍了敌人躲避玩家射击以及敌人不断旋转并向玩家射击的情况。我只是介绍如何在这两种行为之间进行转换。 这种新的敌人行为的目标: 当不开火时,敌人可以躲避玩家的射击。射击时,敌人无法躲避…...
springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。
1、我们在写查询SQL的时候,经常会碰到,比如,同一个类别下的某一个编号的物料信息,或者是同一批次的物料库存问题等等。 所属类别fid物料编号bm物料批次pc110.01.0220240807110.01.0320240807 210.02.0120240805 2、那么我…...
使用ollama取代openai的api进行graphRAG失败记录
pip install ollama pip install langchain_ollama graph_documents llm_transformer.convert_to_graph_documents(split_documents) print(graph_documents) 偶尔会成功,但是大部分是失败的: 报错记录如下,暂时没想到好的办法ÿ…...
MyBatis 配置与测试方式
目录 一,什么是MyBatis 二,准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一,什么是MyBatis 简单来说,MyBatis 是一款优秀的持久层框架,用于简化JDBC的开发,能更简单完成程序与数据库之间…...
C#实现代理服务器
在C#中实现一个简单的代理服务器,可以使用System.Net.Sockets命名空间下的TcpListener类来监听客户端的连接请求,并使用TcpClient来处理与客户端的通信。以下是一个简单的代理服务器示例: using System; using System.IO; using System.Net;…...
react的路由实战使用
环境配置:vitetsreact18 1、安装包 npm i react-router-dom 2、 根路由配置以及路由挂载 a、在src下面创建router文件夹配置简单的路由信息: router/index.tsx import { createBrowserRouter } from "react-router-dom"; import UserLogin…...
python 字典转成类 构建类
目录 python 字典转成类 复杂嵌套示例: 动态实例化类 太好用了! python 字典转成类 class DictToClass:def __init__(self, dictionary):for key, value in dictionary.items():if isinstance(value, dict):# 如果值是字典,递归转换为类的实例setattr(self, key, DictToC…...
springboot 过滤器
1、过滤器的实现 springboot中过滤器通过实现接口Filter并重写init、doFilter、destroy三个方法。在三个方法中加入自己的业务逻辑处理。 【注意】Filter接口的完整包名在不同的jdk版中中的变化。这里示例中使用的版本为 open-jdk17。完整名称 jakarta.servlet.Filter。如果使…...
【C语言篇】深入理解指针1
文章目录 内存和地址内存编址 指针变量和地址取地址操作符指针变量和解引用操作符指针变量指针变量类型解引用操作符指针变量的大小 指针变量类型的意义指针的解引用指针-整数void*指针 const修饰指针指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因如何规避野指针…...
IAP程序升级 与 电脑BIOS 的关系
IAP (In-Application Programming) 程序升级 IAP程序升级是一种技术,允许设备在运行过程中更新其自身的固件或软件,而不需要外部工具或设备的介入。这种技术特别适用于嵌入式系统和物联网(IoT)设备。其主要由三部分构成࿰…...
Kerberos身份认证原理与企业级排错实战指南
1. 这不是“另一个登录框”,而是一套精密运转的身份验证齿轮系统很多人第一次听说 Kerberos,是在公司内网登录邮箱或访问内部系统时,看到那个带小盾牌图标的弹窗——“正在使用 Kerberos 协议进行身份验证”。于是下意识觉得:“哦…...
机器学习赋能6G近场通信:从信道估计到波束赋形的智能革命
1. 项目概述:当6G遇见近场,为何机器学习成为破局关键?如果你关注过5G到6G的技术演进路线,会发现一个核心趋势:天线阵列的规模正在从“大规模”走向“极大规模”。这不仅仅是数量的堆砌,更是通信物理原理的一…...
物理引导的机器学习工作流:气候建模的融合创新与实践
1. 项目概述:当气候建模遇见机器学习如果你像我一样,在气候模拟这个领域摸爬滚打超过十年,就会深刻体会到一种“甜蜜的负担”:我们构建的地球系统模型(ESM)越来越精细,物理过程越来越复杂&#…...
CANN-昇腾NPU-RAG推理-检索增强生成怎么部署
RAG(Retrieval-Augmented Generation)是 LLM 知识库的组合:先检索相关文档,再让 LLM 基于文档回答。昇腾NPU 上部署 RAG 需要两个组件:Embedding 模型(做向量检索)和 LLM(做生成&am…...
《我看见的世界:李飞飞自传》第1-6章阅读笔记:从移民少女到AI教母的“看见“之旅
前言 当我们谈论人工智能时,我们谈论的是算法、数据、算力,是那些冰冷的代码和复杂的模型。但在《我看见的世界:李飞飞自传》中,李飞飞用她独特的视角告诉我们:AI的本质,是人类对"看见"世界的渴望…...
巧用对称性与平均值原理:低成本实现高精度电阻分压器校准
1. 项目概述:用数学思维突破测量设备的精度极限在电子实验室里捣鼓精密电路,尤其是涉及到电压基准、信号调理或者高精度ADC前端时,一个绕不开的坎就是精密分压器。你可能在设计一个需要0.1%甚至更高精度的分压网络,但手头的万用表…...
Postgresql基础实践教程(八)
⭐️⭐️⭐️⭐️⭐️ 完整数据详见 练习数据免费 ⭐️⭐️⭐️⭐️⭐️ 六十九、查找会员ID 27的向上推荐链 问题 查找会员ID 27的向上推荐链:即推荐该会员的人,以及推荐那个人的人,依此类推。返回会员ID、名字和姓氏。按会员ID降序排列。…...
为Claude Code配置稳定API源并解决访问限制
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置稳定API源并解决访问限制 Claude Code 作为一款强大的 AI 编程辅助工具,其原生服务在某些情况下可能…...
【python】ImportError: DLL load failed while importing QtWidgets: 找不到指定的程序。重新安装后搞定
文章目录前言一、PyQt6引用后报错二、使用步骤总结前言 想做个好看的界面,引用了PyQt6,却产生了新问题。 pip install pyqt6-tools,优先做这个动作进行修复。 一、PyQt6引用后报错 python里引用: from PyQt6.QtWidgets import…...
Unity项目DrawCall降不下来?试试用Mesh Baker合并贴图集,保姆级图文教程
Unity性能优化实战:用Mesh Baker合并贴图集降低DrawCall全流程解析当你的Unity项目帧率开始卡顿,Profiler里DrawCall数字居高不下时,合并贴图集往往是解决问题的关键一步。本文将以一个实际项目为例,带你从零开始使用Mesh Baker的…...

