Amazon S3 概念及如何集成到 .net 8 C#
Amazon S3(Simple Storage Service)是一个高度可扩展、数据可用性高、安全性强的对象存储服务。
Amazon S3 使用对象存储架构,数据以对象的形式存储在桶(buckets)中,每个对象都有一个唯一的键(key)。
本文主要分为两个部分:
1、Amazon S3 相关概念
2、.net 集成的代码
* 阅读提示 :鼠标悬停在 章节标题 上可见 文章目录
1、概念
bucket
bucket 是存储 object 的容器,可以按照业务划分出一个 bucket,一个 bucket 中存储多个 object,每个 object 都有自己的唯一标识 key。
bucket 类型
bucket 主要有 3 种类型,分别是 General purpose bucket,Direcotry bucket,Table bucket。
- General purpose bucket
创建 bucket 时的默认类型,它也是 S3 中最主要使用的类型
- Directory bucket
这种类型的 bucket 的 location type 限制使用 Availability Zone 或者 Local Zone
为了低延迟,可以指定你的 Amazon EC2、Amazon EKS 或者 Amazon ECS 计算实例位于同一位置 AWS 区域和可用区。
- Table bucket
提供一种便于大数据分析的表格式的存储方式。
支持 Apache Iceberg 格式,查询速度高于普通 S3 bucket。
无缝集成:可以和 AWS 的分析服务(像 Amazon Athena, Amazon Redshift, AWS Glue Data Catalog)以及开源查询引擎(如 Apache Spark)无缝集成
更多:
[1] Tabular Data Storage At Scale - Amazon S3 Tables - AWS
[2] Table buckets - Amazon Simple Storage Service
bucket 属性
下表将列出一些在配置 bucket 时需要关注的、比较常用的 bucket 属性
| region | 这个 bucket 所属物理位置,和 AWS 账号的 region 是一致的 |
| name | |
| access | 读写权限相关 |
| versioning | 在 bucket 中允许存储一个 object 有不同的版本 |
| tag | 可选项,加一些标签来区分其他的 bucket |
| default encryption | 对于存储的 object 是否加密,可以不启用;启用需要选择加密方式 |
| object lock | 当写入该 object 的时候是否锁定该 object |
| lifecycle | 生命周期管理,一个 object 被上传到 ticket 之后多少时间要触发什么动作,或者多久该 object 被清除掉等等配置 |
| .. | .. |
生命周期管理的一个示例:
此处配置当一个 object 被 upload 到 bucket 后,一天之后该数据过期,但过期并不做任何处理,即并不会被删除

object
当进入一个指定的 bucket 后,会看到它的 object 列表

每一个 object 都有一个自己的 key,这是检索、找回这个 object 的唯一方式。
- object 可以是一个文件
- object 支持类似于文件夹似的对象管理方式,通过对 key 的命名方式来实现
例如
|
object |
key |
|
object 1 |
folder1/key1 |
|
object 2 |
folder1/key2 |
|
object 3 |
folder1/key3 |
这里实际上有 3 个object,但是在 Amazon S3 中查找这 3 个文件的时候,它会以文件目录的方式显示。
使其看起来像是一个文件夹类型的 object,但这只是 S3 网页上的呈现方式,是一种做好分类以便于查阅的前端手段。

- S3 是分布式存储
为了数据高可用性,S3 会多处备份,所以有些 object key 看似逻辑相似,但物理存储位置都是不同的。
安全性保证
- 支持数据加密

- 权限管理


- bucket policy 访问策略
这里是 json 的格式配置哪个AWS用户可以访问该 S3 的哪个 bucket 资源,可以允许什么操作
监控与指标 Metric
- 常规监控指标:bucket 大小,object 数量

- 与 AWS cloud watch 集成

2、与 .net 8 api 项目集成
1、配置 AWS 凭证
确保本地机器 AWS 凭证已配置好,通常,凭证文件位于 ~/.aws/credentials。
2、包依赖
dotnet add package AWSSDK.S3
在你的 .NET 项目中,创建一个 Amazon S3 客户端实例:
using Amazon.S3;
using Amazon.S3.Model;
var s3Client = new AmazonS3Client();
// new AmazonS3Client(config.AccessKey, config.SecretKey, RegionEndpoint.GetBySystemName(config.Region));
下列实例代码使用的是 3.7.9.56 版本 SDK
<PackageReference Include="AWSSDK.S3" Version="3.7.9.56" />
3、实现基本操作
你可以实现基本的 S3 操作,如创建 bucket、上传文件、下载文件等。
- 创建 bucket
var putBucketRequest = new PutBucketRequest
{
BucketName = "your-bucket-name",
UseClientRegion = true
};
var putBucketResponse = await s3Client.PutBucketAsync(putBucketRequest);
- 上传文件
var putObjectRequest = new PutObjectRequest
{
BucketName = "your-bucket-name",
Key = "your-file-key",
FilePath = "path/to/your/file"
};
var putObjectResponse = await s3Client.PutObjectAsync(putObjectRequest);
- 下载文件
var getObjectRequest = new GetObjectRequest
{
BucketName = "your-bucket-name",
Key = "your-file-key"
};
using (var getObjectResponse = await s3Client.GetObjectAsync(getObjectRequest))
using (var responseStream = getObjectResponse.ResponseStream)
using (var fileStream = File.Create("path/to/save/file"))
{
await responseStream.CopyToAsync(fileStream);
}
4、处理错误和异常
确保在代码中处理可能出现的错误和异常,例如网络问题或权限问题。
Amazon S3 概念及如何集成到 .net 8 C#的更多相关文章
- Amazon S3 API
一.概述 Amazon s3,全称为Amazon Simple Storage Service.EC2和S3是Amazon最早推出的两项云服务. REST,这也是比较火的一种Web服务架构.简单来说 ...
- [Ting's笔记Day7]活用套件carrierwave gem:(2)利用Amazon S3架设图片服务器
来到第7篇了!培养写作习惯真是不容易:) 在我的上一篇文章活用套件carrierwave gem:(1)在Rails实现图片上传功能,上传图片功能已经完成啦!但是目前图片仅能上传在自己的本地文件夹内孤 ...
- Amazon S3
Amazon S3 是什么? Amazon S3 是亚马逊推出的一款存储服务,名为 Amazon Simple Storage Service,即亚马逊简单存储服务. 有些 S3 的概念需要了解一下: ...
- 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖
1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...
- Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)
缘起 今年(2023年) 2月的时候做了个适配Amazon S3对象存储接口的需求,由于4月份自学考试临近,一直在备考就拖着没总结记录下,开发联调过程中也出现过一些奇葩的问题,最近人刚从考试缓过来顺手 ...
- cosbench read异常解决办法。 Unable to verify integrity of data download. Client calculated content hash didn't match hash calculated by Amazon S3. The data may be corrupt.
问题:cosbench read测试failed 报错如下 Cosbench v0.4.2.c4 against Ceph (Hammer) / radosgw / HAproxy's HTTP en ...
- [AWS S3] Hosting a Static Website on Amazon S3
In this lesson, you will learn how to host a static website on Amazon S3. I will show you how to cre ...
- Amazon S3数据一致性模型
左右Amazon S3有两种类型的数据的一致性模型的: 最后,一致性和读一致性. 有下面几种行为: 1 写一个新的object,然后開始读它.直到全部的变化都传播完(副本),你才干读到它,否则就是ke ...
- 实现多线程异步自动上传本地文件到 Amazon S3
最近抽空做个小工具,使用AWSSDK 对本地文件目录监控,并自动同步上传文件到S3 的过程,使用的是多线程异步上传,针对大文件进行了分块 参考文献: https://www.codeproject.c ...
- Amazon S3 功能介绍
一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...
随机推荐
- AOP中动态代理详解
动态代理概述 什么是代理 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问 什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目 ...
- 黑苹果(Hackintosh) - 问题,修改CPU数量和内存数量后,系统重启失败
1. 问题复现 安装完黑苹果后,内存默认的 1个处理器2个核心.2G内存,发现不够用. 于是,修改了 VMware 对此系统的 硬件配置 内存: 2G -> 8G 处理器:1个处理器 -> ...
- tailscale安装教程
tailscale安装失败可能是由于以下原因之一导致的: 系统兼容性问题:tailscale可能不支持你的操作系统版本或架构.请确保你的系统满足官方的最低要求,并尝试使用官方提供的正确版本进行安装. ...
- Qt音视频开发17-海康sdk解码
一.前言 在视频监控行业领域,海康当之无愧是老大,稳坐第一的宝座很多年了,近期需要将视频监控系统改成采用海康sdk的内核,于是特意去查阅了sdk的使用手册,sdk相关的文档和文件可以直接官网下载到,而 ...
- 鸿蒙OS创新实践:动态声控话筒开发指南
前言 在鸿蒙OS的生态中,开发者们不断探索和创新,以期为用户带来更丰富的交互体验.最近,我萌生了一个想法:制作一个能够随着声音动态变化的话筒组件.尽管网络上缺乏现成的参考案例,但我决定亲自动手,将这一 ...
- GeoJSON代码示例
GeoJSON代码示例 1. 读取GeoJSON文件 1.1 实现思路 graph TD A[读取GeoJSON文件] --> B[读取GeoJSON文件内容] B --> C[解析Geo ...
- 解决STM32 CubeMX中配置RTC每次上电就会重置的问题
自从有了Cube MX,配置STM32的外设就变得格外简单.不过这次差点踩坑,下载完程序后RTC自动就恢复到了我设置的初始值,重启之后现象依旧. 下面就以上问题简单分析一下代码. /* RTC ini ...
- PHP 安装启用imagick(解决 word press可选的模组imagick未被安装或已被禁用)
本教程仅适用Windows Servier IIS网站服务器. 我的博客使用IIS搭建,相比Linux,相关的教程格外少.因此让以后的小伙伴也能马上解决问题,分享此方法. 首先需要下载php对应版本的 ...
- 展锐SE8451E 开启硬件流控
Dear Customer: 如电话沟通,若将uart0配置成3M波特率,需进行如下更改: 1.时钟源更改为96M/sprdroid10_trunk_19c_rls1/bsp/kernel/ker ...
- springBoot(1)--初步理解
在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2)配置数据库连接.配置sprin ...