当前位置: 首页 > news >正文

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐: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 概览

image-20240810165610262

2.obs 主页

主页地址

对象存储服务 OBS

提供安全稳定、性能领先、无限弹性扩展的存储能力,降低使用成本,驱动千行百业数据价值变现

image-20240806002917784

3.存储包和流量包的区别

存储包和流量包是两种不同的服务产品,通常用于云计算服务中。它们的主要区别在于服务的内容和用途。

存储包主要是指用于抵扣云存储服务中数据存储费用的产品。例如,在华为云对象存储 OBS 服务中,存储包可以用来抵扣 OSS 文件或 ECS 快照的存储费用 。用户购买存储包后,在有效期内,存储包会按照一定的规格(如每小时固定额度)抵扣相应的存储费用。如果存储使用量超出了存储包的抵扣额度,超出部分将按照按量付费的方式计算费用。

流量包则是指用于抵扣数据传输过程中产生的流量费用的产品。流量包可以进一步细分为多种类型,例如下行流量包、回源流量包等。下行流量包用于抵扣从云存储服务向外网传输数据产生的流量费用,而回源流量包则用于抵扣数据从云存储服务传输到内容分发网络(CDN)边缘节点产生的流量费用 。流量包通常有预设的有效期和额度,用户在使用过程中,相应的流量费用会被流量包抵扣,超出额度则按实际用量计费。

4.购买服务

存储包和流量包的区别

存储包:华为云 obs 存储包还是比较便宜的,40G 一年只要 9 元

image-20240810165751309

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

image-20240810165857211

5.PicGo 配置 OBS

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

image-20240810170209183

三.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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

IIC协议

一、IIC协议 1.1 IIC协议概述 IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS(飞利浦)公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。IIC属于半双工同步通信方式 特点 简单性和有效性。 由于接口直接在组件之上&#xff0c;…...

如何在linux系统上部署nginx

1&#xff09;首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2&#xff09;然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3&#xff09;执行 tar -zxvf nginx-1.23…...

香港网站服务器抵御恶意攻击的一些措施

香港网站服务器因为在互联网中扮演着重要的角色&#xff0c;因此也在面临着网络中各种恶意攻击的威胁&#xff0c;为了确保香港网站服务器的安全和稳定运行&#xff0c;可以通过安全措施来进行防御&#xff0c;本文就来分享一些香港网站服务器来抵御恶意攻击的关键措施。 一、网…...

实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)

https://wiki.onedayxyy.cn/docs/filesite.io-photot-install-full...

美团到店面经

redis中大key引起的问题 1、阻塞请求 Big Key对应的value较大&#xff0c;我们对其进行读写的时候&#xff0c;需要耗费较长的时间&#xff0c;这样就可能阻塞后续的请求处理。Redis的核心线程是单线程&#xff0c;单线程中请求任务的处理是串行的&#xff0c;前面的任务完不成…...

【CSS入门】第五课 - font字体

这一节&#xff0c;我们说一说font这个字体。做网页开发&#xff0c;网页中几乎不可能没有文字的&#xff0c;为了使网页更漂亮&#xff0c;用户体验更好。人们可算是绞尽脑汁&#xff0c;其中一部分就是在字体上下的大功夫。 接下来&#xff0c;我们学习一下&#xff0c;font…...

STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程

1、门电路 门电路组成简单加法器&#xff1a; 二进制对电路的影响&#xff1a; 0和1代表无和有&#xff1b; 以下图例&#xff0c;演示与门&#xff1a;左1右1输出1&#xff1b; 电平标准&#xff1a;使用不同的电压表示数字0和1&#xff1b; 高电平&#xff1a;1&#xff1…...

【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树

整数拆分 题目&#x1f517; 题目描述 给定一个正整数 n &#xff0c;将其拆分为 k个正整数的和&#xff08;k > 2&#xff09;&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积 。 思路分析 dp数组含义&#xff1a;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的时候&#xff0c;经常会碰到&#xff0c;比如&#xff0c;同一个类别下的某一个编号的物料信息&#xff0c;或者是同一批次的物料库存问题等等。 所属类别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) 偶尔会成功&#xff0c;但是大部分是失败的&#xff1a; 报错记录如下&#xff0c;暂时没想到好的办法&#xff…...

MyBatis 配置与测试方式

目录 一&#xff0c;什么是MyBatis 二&#xff0c;准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一&#xff0c;什么是MyBatis 简单来说&#xff0c;MyBatis 是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发&#xff0c;能更简单完成程序与数据库之间…...

C#实现代理服务器

在C#中实现一个简单的代理服务器&#xff0c;可以使用System.Net.Sockets命名空间下的TcpListener类来监听客户端的连接请求&#xff0c;并使用TcpClient来处理与客户端的通信。以下是一个简单的代理服务器示例&#xff1a; using System; using System.IO; using System.Net;…...

react的路由实战使用

环境配置&#xff1a;vitetsreact18 1、安装包 npm i react-router-dom 2、 根路由配置以及路由挂载 a、在src下面创建router文件夹配置简单的路由信息&#xff1a; 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程序升级是一种技术&#xff0c;允许设备在运行过程中更新其自身的固件或软件&#xff0c;而不需要外部工具或设备的介入。这种技术特别适用于嵌入式系统和物联网&#xff08;IoT&#xff09;设备。其主要由三部分构成&#xff0…...

Java使用MQTT协议

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种轻量级的、基于发布/订阅模式的物联网通信协议。它构建于TCP/IP协议之上&#xff0c;由IBM在1999年发布。MQTT的主要特点包括&#xff1a; 轻量级与高效&#xff1a;M…...

等级+时间的优先级算法

简介 本算法为等级与时间结合计算对应优先级逻辑 等级越高者优先级越高 同等级下&#xff0c;时间越小者优先级越高 实现 主方法 calculatePriority import com.zk.blog.enums.TypeEnum; import org.apache.commons.lang3.StringUtils;/*** program: * description:* autho…...

物流仓库安全视频智能管理方案:构建全方位、高效能的防护体系

一、背景分析 随着物流行业的快速发展和仓储需求的日益增长&#xff0c;仓库安全成为企业运营中不可忽视的重要环节。传统的人工监控方式不仅效率低下&#xff0c;且难以做到全天候、无死角覆盖&#xff0c;给仓库资产和人员安全带来潜在风险。因此&#xff0c;引入仓库安全视…...

jackson反序列化漏洞

jackson反序列化漏洞 反序列化漏洞触发根因jackson介绍jackson反序列化漏洞关键点enableDefaultTypingactivateDefaultTypingJsonTypeInfo 漏洞触发场景漏洞复现环境引入依赖pocactivateDefaultTypingenableDefaultTypingJsonTypeInfo 参考 很久没写blog&#xff0c;最近慢慢开…...

Java | Leetcode Java题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode oddEvenList(ListNode head) {if (head null) {return head;}ListNode evenHead head.next;ListNode odd head, even evenHead;while (even ! null && even.next ! null) {odd.next even.nex…...

100 Exercises To Learn Rust 挑战!准备篇

公司内部的学习会非常活跃&#xff01;我也参与了Rust学习会&#xff0c;并且一直在研究rustlings。最近&#xff0c;我发现了一个类似于rustlings的新教程网站&#xff1a;Welcome - 100 Exercises To Learn Rust。 rustlings是基于Rust的权威官方文档《The Rust Programming…...

瑞_RabbitMQ_初识MQ

文章目录 1 初识MQ1.1 同步调用1.1.1 同步调用的优势1.1.2 同步调用的缺点 1.2 异步调用1.2.1 异步调用的角色1.2.2 异步调用的优势1.2.3 异步调用的缺点1.2.4 异步调用的场景 1.3 MQ技术选型 2 RabbitMQ2.1 安装2.1.1 资源准备2.1.2 安装步骤 2.2 RabbitMQ架构2.3 RabbitMQ管理…...

系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理

虚拟内存 虚拟内存是一种操作系统提供的机制&#xff0c;用于将每个进程分配的独立的虚拟地址空间映射到实际的物理内存地址空间上。通过使用虚拟内存&#xff0c;操作系统可以有效地解决多个应用程序直接操作物理内存可能引发的冲突问题。 在使用虚拟内存的情况下&#xff0…...

Java每日一练_模拟面试题5(堆和栈的区别)

在Java中&#xff0c;堆&#xff08;Heap&#xff09;和栈&#xff08;Stack&#xff09;是两个不同的内存区域&#xff0c;它们在存储内容、管理方式、空间大小、分配方式等多个方面存在显著的区别。以下是Java中堆和栈的主要区别&#xff1a; 1. 存储内容不同 堆&#xff1…...

传感器校正和测试

是 一。舵机在使用过程中为了防止手动扭动损坏其中的齿轮&#xff0c;一般会使用代码测试并校正到0位。 #include <Servo.h> Servo myservo; // 创建一个Servo对象 // 连接到舵机信号线的Arduino引脚 int servoPin 9; void setup() { myservo.attach(servoPin…...