在 .NET Core 中使用阿里云对象存储服务
阿里巴巴是一家在亚洲,尤其是中国拥有大量市场份额的云提供商。
对象存储服务 (OSS) 是一种加密且安全的云存储服务,可以存储、处理和访问来自世界任何地方的海量数据。OSS 相当于 Azure Blob 存储。
OSS基于Buckets,每个Bucket就像一个容器,可以让你插入大量不同扩展名和格式的文件。
首先,您可以创建一个新的 Bucket 并开始存储文件。
例如,在概述部分,您可以看到与您创建的存储桶、版本控制、启用 CORS 和服务器端加密相关的所有属性。
要将 OSS 与 .NET Core 一起使用,我们需要先安装该库。
Nuget 包
NuGet Gallery | Aliyun.OSS.SDK.NetCore 2.13.0
要连接bucket ,您需要 4 个参数,
private readonly string bucketName = "bucketName"; //bucket name in OSS
private readonly string accessKeyId = "<yourAccessKeyId>"; // AccessKey from Alibaba Account
private readonly string accessKeySecret = "<yourAccessKeySecret>"; // KeySecret from Alibaba Account
private readonly string endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // endpoint from region where the OSS is hosted
然后,我们需要创建一个 OssClient 来根据我们的需要执行我们需要的命令。
这是一个使用 PutObject 在 OSS 中插入新文件的示例,
//class to transfer info
public class MyFile
{
public string FileName {get;set;}
public string ContentType {get;set;}
public byte[] FileInfo {get;set;}
}
public async Task SaveFileAsync(MyFile file)
{
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
client.PutObject(bucketName, file.FileName, new MemoryStream(file.FileInfo));
}
我们可以使用 ListObjects 来获取 Bucket 中的所有文件,
// 创建一个 OSSClient 实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
ObjectListing objects = client.ListObjects(bucketName);
我们可以使用 GetObject 获取有关特定文件的所有信息,包括以字节为单位的数据,
public async Task < MyFile > GetInfoFile(string fileName) {
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var objectinfo = client.GetObject(bucketName, fileName);
MemoryStream ms = new MemoryStream();
await objectinfo.Content.CopyToAsync(ms);
var myfile = new MyFile() {
FileName = objectinfo.Key, FileInfo = ms.ToArray()
};
return myfile;
}
最后,这是一个将此方法包含在接口中的示例,
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using shared;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace api.Services {
public class AlibabaCloudStorageService: IAlibabaCloudStorageService {
private readonly IConfiguration Configuration;
private readonly string bucketName = "mteheranst1";
private readonly string accessKeyId = "<yourAccessKeyId>";
private readonly string accessKeySecret = "<yourAccessKeySecret>";
private readonly string endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
public AlibabaCloudStorageService(IConfiguration configuration) {
Configuration = configuration;
accessKeyId = Configuration["AccessKeyId"];
accessKeySecret = Configuration["AccessKeySecret"];
endpoint = Configuration["Endpoint"];
}
public async Task SaveFileAsync(MyFile file) {
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
client.PutObject(bucketName, file.FileName, new MemoryStream(file.FileInfo));
}
public async Task < IEnumerable < MyFile >> GetFiles() {
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
ObjectListing objects = client.ListObjects(bucketName);
List < MyFile > list = new List < MyFile > ();
foreach(var item in objects.ObjectSummaries) {
var myFile = new MyFile() {
FileName = item.Key
};
list.Add(myFile);
}
return list;
}
public async Task < Myfile > GetInfoFile(string fileName) {
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var objectinfo = client.GetObject(bucketName, fileName);
MemoryStream ms = new MemoryStream();
await objectinfo.Content.CopyToAsync(ms);
var myfile = new MyFile() {
FileName = objectinfo.Key, FileInfo = ms.ToArray()
};
return myfile;
}
}
public interface IAlibabaCloudStorageService {
Task SaveFileAsync(MyFilefile);
Task < IEnumerable < MyFile >> GetFiles();
Task < MyFile > GetInfoFile(string fileName);
}
}
我想与您分享本指南,您可以在其中学习如何在 Blazor + .NET Core 和阿里云 (OSS) 中管理文件。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!