zoukankan      html  css  js  c++  java
  • .NET Core AWS S3云存储

    前言

    最近有需要用到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存储对象时暂遇到或需注意上述两个小问题,在此做一记录,若能帮到有需要的童鞋,将再好不过了。

  • 相关阅读:
    (重要)1
    大数据技术
    条件随机场之CRF++源码详解-预测
    条件随机场之CRF++源码详解-训练
    条件随机场之CRF++源码详解-特征
    条件随机场之CRF++源码详解-开篇
    这个更新需要花去 50.6 M 磁盘上总计 /boot 的空间。请在 7737k 磁盘上留出 /boot 空间。清空您的回收站和临时文件,用“sudo apt-get clean
    多线程:pthread_exit,pthread_join,pthread_self
    error: ‘for’ loop initial declarations are only allowed in
    多线程
  • 原文地址:https://www.cnblogs.com/CreateMyself/p/14188297.html
Copyright © 2011-2022 走看看