我有一些代码使用AWSSDK.S3将数据上传到 S3,这并不神秘。
由于 IBM 声称它的Cloud Object Storage与S3 兼容,因此只需更改 appsettings.json 中的 ServiceURL 就可以使用 AWSSDK.S3 将文件上传到 IBM COS?
以前有人这样做过吗?
我有一些代码使用AWSSDK.S3将数据上传到 S3,这并不神秘。
由于 IBM 声称它的Cloud Object Storage与S3 兼容,因此只需更改 appsettings.json 中的 ServiceURL 就可以使用 AWSSDK.S3 将文件上传到 IBM COS?
以前有人这样做过吗?
我不确定,appsettings.json
但是是的,如果您将 设置为ServiceURL
用于创建客户端的配置,它应该可以透明地工作。显然,任何 COS 不支持的 AWS 功能都无法使用,并且任何 COS 扩展(如 API 密钥身份验证或 Key Protect 等)都将不可用。
就像是:
AmazonS3Config S3Config = new AmazonS3Config {ServiceURL = "https://s3.us.cloud-object-storage.appdomain.cloud"};
string accessKeyId = "<accesskey>";
string secretAccessKey = "<secretkey>";
BasicAWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey);
AmazonS3Client client = new AmazonS3Client(credentials, S3Config);
我能够在 Net Core 3.1.17 后端使用 AWSSDK.S3。我的目标是使用 IBM COS(云对象存储)服务:从中读取、写入和删除文件。使用 AWSDK.S3 是因为现在没有来自 IBM 或其他人的 nuget 包可以帮助我们(开发人员),所以有两种方法:
感谢上一个答案,我做了一些研究和改进,这些步骤是为了使其即使在 Microsoft 的依赖注入下也能正常工作。
{
"CosLogs":{
"ServiceURL":"https://s3.eu-de.cloud-object-storage.appdomain.cloud",
"AccessKeyId":"youaccessKeyIdTakenFromCredentialServiceDetail",
"SecretAccessKey":"yourSecreatAccessKeyTakenFromCredentialServiceDetail"
}
}
请记住,可以从IBMCLoud 端点文档中检索 ServiceUrl ,它取决于您决定定位资源的区域。就我而言,自从我使用欧盟德国以来,我的 serviceUrl 是:s3.eu-de.cloud-object-storage.appdomain.cloud
var awsOptions = configuration.GetAWSOptions("CosLogs");
var accessKeyId = configuration.GetValue<string>("CosLogs:AccessKeyId");
var secretAccessKey = configuration.GetValue<string>("CosLogs:SecretAccessKey");
awsOptions.Credentials = new BasicAWSCredentials(accessKeyId,secretAccessKey);
services.AddDefaultAWSOptions(awsOptions);
services.AddAWSService<IAmazonS3>();
/// <summary>
/// The S3 Client (COS is S3 compatible)
// </summary>
private readonly IAmazonS3 s3Client;
public CosService(IAmazonS3 s3Client, ILogger<CosService> logger)
{
this.s3Client = s3Client;
this.logger = logger;
}
public async Task DoCosCallAsync(CancellationToken cancellationToken){
var bucketList= await s3Client.ListBucketsAsync(cancellationToken);
}
安装的相关软件包: