什么是阿里雲對象存儲OSS
阿里雲對象存儲OSS(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲存儲服務。其數據設計持久性不低於99.9999999999%(12個9),服務可用性(或業務連續性)不低於99.995%。

OSS具有與平台無關的RESTful API接口,您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。使用阿里雲提供的API、SDK接口或者OSS遷移工具輕松地將海量數據移入或移出阿里雲OSS。
數據存儲到阿里雲OSS以后,您可以選擇"標准存儲(Standard)"作為移動應用、大型網站、圖片分享或熱點音視頻的主要存儲方式,也可以選擇成本更低、存儲期限更長的"低頻訪問存儲(Infrequent Access)"、"歸檔存儲(Archive)"、"冷歸檔存儲(Cold Archive)"作為不經常訪問數據的存儲方式。
對象存儲OSS相關概念
- 存儲類型(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內的全部或部分文件。
- 刪除文件
當您不再需要保留上傳的文件時,您可以手動刪除單個或多個文件,也可以通過配置生命周期規則自動刪除單個或多個文件。
勤學勤練
創建解決方案及目錄
1. 新建名為"HelloAliyunOss"的解決方案
dotnet new sln -o HelloAliyunOss

2. 切換到"HelloAliyunOss"目錄
cd .\HelloAliyunOss\

創建.Net Core的Wpf項目
1. 創建名為"demoForWpfCore"的Wpf項目
dotnet new wpf -o demoForWpfCore -f net5.0

2. 添加"demoForWpfCore"到解決方案
dotnet sln add .\demoForWpfCore\demoForWpfCore.csproj

3. 切換到"demoForWpfCore"目錄
cd .\demoForWpfCore\

4. 運行"demoForWpfCore"項目
dotnet watch run

.Net Core的WPF項目安裝Aliyun.OSS.SDK包
a. 命令行安裝"Aliyun.OSS.SDK.NetCore"
dotnet add package Aliyun.OSS.SDK.NetCore

b. 或者項目右鍵Nuget包管理,通過可視化界面安裝"Aliyun.OSS.SDK.NetCore"

c. 安裝之前,Bin目錄結構

d. 安裝之后,Bin目錄結構

發現,新增了Aliyun.OSS.Core.dll這一個文件。
e. 安裝之后,運行效果

f. 命令行打開項目位置
explorer.exe .

WPF項目初始化OssClient實例
1. 准備本地配置存儲OSS授權信息
在demoForWpfCore項目上右鍵-添加-添加項,選中"應用程序配置文件"。

會得到一個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>

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;
}
這里我們新建三個變量accessKeyId、accessKeySecret、endpoint,在進入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來展示數據,把存儲空間對應的名稱、位置、所有者展示出來。

