前言

最近有需要用到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云存储的更多相关文章

  1. 腾讯云VS AWS :云存储网关性能谁更优?

    p { text-indent: 2em }    随着企业规模的扩大及业务的扩展,现有IT基础设施特别是存储设备无法满足爆炸性的数据增长,企业 IT 部门为了解决该问题,往往面临市场上多种存储产品及 ...

  2. AWS S3 对象存储服务

    虽然亚马逊云非常牛逼,虽然亚马逊云财大气粗,虽然亚马逊用的人也非常多,可是这个文档我简直无法接受,特别是客服,令人发指的回复速度,瞬间让人无语,可是毕竟牛逼.忍了,躺一次坑而已 1.图片上传 1.1 ...

  3. 云存储的未来:Scale Up还是Scale Out?

      云存储的几十年发展历程,其计算架构模型,也从Scale Up走向Scale Out.但是展望未来数字世界的海量需求,目前流行的模型还能够持续满足吗?本文通过对云存储历史的回顾,及对Scale Up ...

  4. AWS S3国内与国外的区别

    S3云存储国际版目前正被某墙,国内部分地区只能下载不能上传,所以建议S3使用国内AWS的. 国内S3与国外S3在编程时注意以下几点: 1)URL不通用 国际版的S3可以使用不带Region的URL,例 ...

  5. 【系统设计】S3 对象存储

    在本文中,我们设计了一个类似于 Amazon Simple Storage Service (S3) 的对象存储服务.S3 是 Amazon Web Services (AWS) 提供的一项服务, 它 ...

  6. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  7. s3存储桶:s3可扩展的云存储

    S3(Simple Storage Service,简单存储服务),即可扩展的云存储,又称桶存储,S3 是一种面向 Internet 的存储服务.S3为任意类型的文件提供临时或永久的存储服务.用于存储 ...

  8. harbor使用aws s3存储

    参考:http://www.vmtocloud.com/how-to-configure-harbor-registry-to-use-amazon-s3-storage/ s3 bucket权限:更 ...

  9. aws S3存储概念

    S3存储(Simple Storage Service) 存储桶:存储桶是S3中用于存储对象的容器.每个对象都存储在一个存储桶中. 对象:对象是S3中存储的基本实体.对象由对象数据和元数据组成.数据部 ...

随机推荐

  1. 学习Java的第一步,配置电脑环境

    JAVA安装与配置 俗话说的好,工欲善其事,必先利其器,想要学习Java,那么我们首先需要一个能够进行学习的环境. 一.安装JDK 为什么要安装jdk,jdk是什么? ​ JDK是java软件开发包( ...

  2. 面经手册 · 第20篇《Thread 线程,状态转换、方法使用、原理分析》

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  3. Django----Serializer序列化

    serializer的两大特征 1.校检数据 2.序列化 首先创建apps/Serializer.py 在序列化里面导包 from rest_framework import serializers ...

  4. charles功能(二)修改response请求参数

    1.接口处 鼠标右击,选择breakpoints(允许本接口使用breakpionts功能) 2.开始设置断点值 4.重新请求接口(charles的界面变为可编辑状态),修改请求参数,执行请求 5.最 ...

  5. springboot多模块项目搭建遇到的问题记录

    废话不多说,直接上问题报错与解决方法. 问题报错一:(报错信息看下方代码) 问题原因:'com.company.logistics.service.company.CompanyService' 未找 ...

  6. moviepy音视频剪辑:headblur函数遇到的ValueError assignment destination is read-only问题及解决办法

    ☞ ░ 前往老猿Python博文目录 ░ 一.运行环境 运行环境如下: python版本:3.7 opencv-python版本:4.2.0.34 numpy版本:1.19.0 二.错误案例代码及报错 ...

  7. PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...

  8. Python中函数是否能使用全局变量?

    Python函数中的变量,既可以使用局部变量(本地名字空间的变量),也可以使用全局变量(全局名字空间的变量),函数在执行查找变量只读时,先在局部变量中查找,找不到再查到全局变量中查找.因此当局部变量和 ...

  9. GPU相关资料汇总

    qemu, quick emulator systemc xilinx qemu nvdla, nvidia deep learning accelerator gpgpu-sim ffgpu ope ...

  10. 利用神经网络算法的C#手写数字识别(一)

    利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...