乘风破浪,.Net Core遇见阿里云对象存储OSS SDK,业界领先的云服务存储服务

时间:2024-03-11 18:05:42

什么是阿里云对象存储OSS

https://www.aliyun.com/product/oss/

阿里云对象存储OSSObject Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。其数据设计持久性不低于99.9999999999%(12个9),服务可用性(或业务连续性)不低于99.995%

image

OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。

数据存储到阿里云OSS以后,您可以选择"标准存储(Standard)"作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的"低频访问存储(Infrequent Access)"、"归档存储(Archive)"、"冷归档存储(Cold Archive)"作为不经常访问数据的存储方式。

对象存储OSS相关概念

https://help.aliyun.com/document_detail/31817.html

  • 存储类型(Storage Class)

OSS提供标准、低频访问、归档、冷归档四种存储类型,全面覆盖从热到冷的各种数据存储场景。其中标准存储类型提供高持久、高可用、高性能的对象存储服务,能够支持频繁的数据访问;低频访问存储类型适合长期保存不经常访问的数据(平均每月访问频率1到2次),存储单价低于标准类型;归档存储类型适合需要长期保存(建议半年以上)的归档数据;冷归档存储适合需要超长时间存放的极冷数据。更多信息,请参见存储类型介绍。

  • 存储空间(Bucket)

存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。您可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 对象(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。

  • 地域(Region)

地域表示OSS的数据中心所在物理位置。您可以根据费用、请求来源等选择合适的地域创建Bucket。更多信息,请参见OSS已开通的地域。

  • 访问域名(Endpoint)

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。更多信息,请参见各个Region对应的Endpoint。

  • 访问密钥(AccessKey)

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKey Secret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

对象存储OSS常见操作

  • 创建Bucket

在上传文件(Object)到OSS之前,您需要创建一个用于存储文件的Bucket。Bucket具有各种配置属性,包括地域、访问权限以及其他元数据。

  • 上传文件

Bucket创建完成后,您可以通过多种方式上传不同大小的文件。

  • 下载文件

文件上传完成后,您可以将文件下载至浏览器默认路径或本地指定路径。

  • 列举文件

当您Bucket内存储了大量的文件后,您可以选择列举Bucket内的全部或部分文件。

  • 删除文件

当您不再需要保留上传的文件时,您可以手动删除单个或多个文件,也可以通过配置生命周期规则自动删除单个或多个文件。

勤学勤练

https://github.com/TaylorShi/HelloAliyunOss

创建解决方案及目录

1. 新建名为"HelloAliyunOss"的解决方案

dotnet new sln -o HelloAliyunOss

image

2. 切换到"HelloAliyunOss"目录

cd .\HelloAliyunOss\

image

创建.Net Core的Wpf项目

1. 创建名为"demoForWpfCore"的Wpf项目

dotnet new wpf -o demoForWpfCore -f net5.0

image

2. 添加"demoForWpfCore"到解决方案

dotnet sln add .\demoForWpfCore\demoForWpfCore.csproj

image

3. 切换到"demoForWpfCore"目录

cd .\demoForWpfCore\

image

4. 运行"demoForWpfCore"项目

dotnet watch run

image

.Net Core的WPF项目安装Aliyun.OSS.SDK包

https://www.nuget.org/packages/Aliyun.OSS.SDK.NetCore

a. 命令行安装"Aliyun.OSS.SDK.NetCore"

dotnet add package Aliyun.OSS.SDK.NetCore

image

b. 或者项目右键Nuget包管理,通过可视化界面安装"Aliyun.OSS.SDK.NetCore"

image

c. 安装之前,Bin目录结构

image

d. 安装之后,Bin目录结构

image

发现,新增了Aliyun.OSS.Core.dll这一个文件。

e. 安装之后,运行效果

image

f. 命令行打开项目位置

explorer.exe .

image

WPF项目初始化OssClient实例

https://help.aliyun.com/document_detail/32087.html

1. 准备本地配置存储OSS授权信息

demoForWpfCore项目上右键-添加-添加项,选中"应用程序配置文件"。

image

会得到一个App.config文件,初始化内容为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

然后我们在configuration节点下,新建appSettings节点并且添加一些OSS需要Key。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="AccessKeyId" value="***********"/>
    <add key="AccessKeySecret" value="*********************************"/>
    <add key="Endpoint" value="http://oss-cn-hangzhou.aliyuncs.com"/>
  </appSettings>
</configuration>

image

2. 读取本地配置存储OSS授权信息

private static string accessKeyId;
private static string accessKeySecret;
private static string endpoint;

public MainWindow()
{
    InitializeComponent();
}

private void InitConfig()
{
    accessKeyId = ConfigurationManager.AppSettings["AccessKeyId"] ?? string.Empty;
    accessKeySecret = ConfigurationManager.AppSettings["AccessKeySecret"] ?? string.Empty;
    endpoint = ConfigurationManager.AppSettings["Endpoint"] ?? string.Empty;
}

这里我们新建三个变量accessKeyIdaccessKeySecretendpoint,在进入MainWindow窗体的时候初始化配置的值,如果为空那么就是String.Empty处理。

3. 使用授权信息初始化OssClient实例

public MainWindow()
{
    InitializeComponent();
    InitConfig();
    Loaded += MainWindow_Loaded;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    // 由用户指定的OSS访问地址、阿里云颁发的AccessKeyId/AccessKeySecret构造一个新的OssClient实例。
    var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret);
}

4. 获取存储空间列表并展示

<Grid Background="WhiteSmoke">
    <ListView x:Name="ListViewForBucket">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="空间名称" Width="Auto" DisplayMemberBinding="{Binding Name}"/>
                <GridViewColumn Header="空间位置" Width="Auto" DisplayMemberBinding="{Binding Location}"/>
                <GridViewColumn Header="空间所有者" Width="Auto" DisplayMemberBinding="{Binding Owner}"/>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    // 由用户指定的OSS访问地址、阿里云颁发的AccessKeyId/AccessKeySecret构造一个新的OssClient实例。
    var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret);
    try
    {
        var buckets = ossClient.ListBuckets();
        ListViewForBucket.ItemsSource = buckets;

        Console.WriteLine("List bucket succeeded");
        foreach (var bucket in buckets)
        {
            Console.WriteLine("Bucket name:{0},Location:{1},Owner:{2}", bucket.Name, bucket.Location, bucket.Owner);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("List bucket failed. {0}", ex.Message);
    }
}

这里我们用一个GridView来展示数据,把存储空间对应的名称、位置、所有者展示出来。

image