.NET Core AWS S3云存储
前言
最近有需要用到AWS S3云存储上传附件,这里对利用.NET或.NET Core在调用SDK APi需要注意的一点小问题做个记录,或许能对后续有用到的童鞋提供一点帮助
AWS S3云存储
官方已提供针对.NET/.NET Core针对S3的APi(https://docs.aws.amazon.com/sdkfornet/v3/apidocs/)和SDK demo(https://github.com/awslabs/aws-sdk-net-samples),首先我们下载针对.NET Core的SDK包(AWSSDK.Core)以及通过S3存储对象包(AWSSDK.S3),如下图所示

接下来我们再利用官方所给SDK Demo,此时并不能直接复制拿来使用,如下:
using (client = new AmazonS3Client(RegionEndpoint.USWest2))
{
Console.WriteLine("Listing buckets");
ListingBuckets(); Console.WriteLine("Creating a bucket");
CreateABucket(); Console.WriteLine("Writing an object");
WritingAnObject(); Console.WriteLine("Reading an object");
ReadingAnObject(); Console.WriteLine("Deleting an object");
DeletingAnObject(); Console.WriteLine("Listing objects");
ListingObjects();
}
AWS S3上传附件要提供上传凭证和配置,AK(awsAccessKeyId)和SK(awsSecretAccessKey)作为凭证。Region(awsRegion)和EndPoint(awsEndPoint)作为配置,大部分情况下我们都是利用如下构造
public AmazonS3Client(AWSCredentials credentials, AmazonS3Config clientConfig);
因凭证就是AK/SK,我们也可直接提供ak、sk,如下构造,一切根据实际业务对接情况而具体分析
public AmazonS3Client(string awsAccessKeyId, string awsSecretAccessKey, AmazonS3Config clientConfig);
通过官网介绍,凭证可以通过配置文件、环境变量等等共享,这一块并不是重点,未细看,请忽略,我直接将其存放到配置文件中。最终构造AWSS3Client,如下代码:
//提供awsAccessKeyId和awsSecretAccessKey构造凭证
var credentials = new BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey); //提供awsEndPoint(域名)进行访问配置
var clientConfig = new AmazonS3Config
{
ServiceURL = awsEndPoint
}; var amazonS3Client = new AmazonS3Client(credentials, clientConfig);
AWS提供了常用的ReginEndPoint,但若对接方提供了自定义Region,则需通过如下配置获取RegionEndPoint
var clientConfig = new AmazonS3Config
{
RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
ServiceURL = awsEndPoint
};
此时再运行将会抛出如下异常:

此时针对上述访问配置,继续配置ForcePathStyle为true,说明请求都将采用路径风格地址,据猜测我们使用指定域名(ServiceURL)来发送请求,所以应该必须指定此属性。
var clientConfig = new AmazonS3Config
{
RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
ServiceURL = awsEndPoint,
ForcePathStyle = true
};
总结
利用.NET Core在AWS S3存储对象时暂遇到或需注意上述两个小问题,在此做一记录,若能帮到有需要的童鞋,将再好不过了。
.NET Core AWS S3云存储的更多相关文章
- 腾讯云VS AWS :云存储网关性能谁更优?
p { text-indent: 2em } 随着企业规模的扩大及业务的扩展,现有IT基础设施特别是存储设备无法满足爆炸性的数据增长,企业 IT 部门为了解决该问题,往往面临市场上多种存储产品及 ...
- AWS S3 对象存储服务
虽然亚马逊云非常牛逼,虽然亚马逊云财大气粗,虽然亚马逊用的人也非常多,可是这个文档我简直无法接受,特别是客服,令人发指的回复速度,瞬间让人无语,可是毕竟牛逼.忍了,躺一次坑而已 1.图片上传 1.1 ...
- 云存储的未来:Scale Up还是Scale Out?
云存储的几十年发展历程,其计算架构模型,也从Scale Up走向Scale Out.但是展望未来数字世界的海量需求,目前流行的模型还能够持续满足吗?本文通过对云存储历史的回顾,及对Scale Up ...
- AWS S3国内与国外的区别
S3云存储国际版目前正被某墙,国内部分地区只能下载不能上传,所以建议S3使用国内AWS的. 国内S3与国外S3在编程时注意以下几点: 1)URL不通用 国际版的S3可以使用不带Region的URL,例 ...
- 【系统设计】S3 对象存储
在本文中,我们设计了一个类似于 Amazon Simple Storage Service (S3) 的对象存储服务.S3 是 Amazon Web Services (AWS) 提供的一项服务, 它 ...
- Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传
背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...
- s3存储桶:s3可扩展的云存储
S3(Simple Storage Service,简单存储服务),即可扩展的云存储,又称桶存储,S3 是一种面向 Internet 的存储服务.S3为任意类型的文件提供临时或永久的存储服务.用于存储 ...
- harbor使用aws s3存储
参考:http://www.vmtocloud.com/how-to-configure-harbor-registry-to-use-amazon-s3-storage/ s3 bucket权限:更 ...
- aws S3存储概念
S3存储(Simple Storage Service) 存储桶:存储桶是S3中用于存储对象的容器.每个对象都存储在一个存储桶中. 对象:对象是S3中存储的基本实体.对象由对象数据和元数据组成.数据部 ...
随机推荐
- 4. Eclipse集成Git
4.1 Git插件 Eclipse中已经内置了Git插件 4.2 把工程初始化为本地库 初始化 设置本地库范围的签名 4.3 Git图标 4.4 Eclipse特定文件 Eclispe特定文件介绍 为 ...
- python安装第三方库aiohtpp,sanio失败,pip install multidict 失败问题
1.python的第三库安装地址:http://www.lfd.uci.edu/~gohlke/pythonlibs 2. 3.pip安装.whl文件指定该文件的位置
- VisualStudio C++使用汇编函数
Visual Studio编写C++代码使用汇编函数 新建空项目 新建如下源文件 ;test.asm ;测试函数 三个数相加 ;.386 .model flat, c ;public test_ .c ...
- Razorpay支付对接,JAVA对接篇
Razorpay 作为印度本土的一家支付公司,类似中国的支付宝 微信,本篇记录一下对接印度第三方支付公司 准备工作: 注册公司 申请Razorpay账号 申请正式环境 Razorpay工作台: 获取k ...
- shiro利用过期时间,解决用户冻结踢出问题
背景 shiro中需要冻结某个用户,但是此时此刻这个用户在线,如果冻结只是改变状态的话,只会导致用户不满,所以要改变这个办法. 在查找过程中发现都是告诉shiro写自定义过滤器,那么我如果自定义过滤器 ...
- Netty源码解析 -- PoolChunk实现原理
本文主要分享Netty中PoolChunk如何管理内存. 源码分析基于Netty 4.1.52 内存管理算法 首先说明PoolChunk内存组织方式. PoolChunk的内存大小默认是16M,Net ...
- SELECT 1,2,3...的含义及其在SQL注入中的用法
首先,select 之后可以接一串数字:1,2,3-只是一个例子,这串数字并不一定要按从小到大排列,也不一定从1开始,这串数字的值和顺序是任意的,甚至可以是重复的,如:11,465,7461,35 或 ...
- 【C/C++】C和C++11之enum枚举的使用细节
作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14101271.html 目录 一.前言 二.C中的枚举(enum) 2.1 C中枚举的大小 2.2 C中枚举的取 ...
- vue props默认值国际化报错
未做国际化处理 tabLabel: { type: Array, default: () => (["a", "b", "c"]) } ...
- 题解-CF708D Incorrect Flow
题面 CF708D Incorrect Flow 给一张网络流图,可能有流量不守恒或者流量超过容量的情况,求最少的将某条边流量或容量 \(\pm 1\) 的操作次数使得网络流图正确. 数据范围:\(1 ...