.NETCore AWS S3操作

获取预签名URL,可以用来回显(共享对象),上传文件用

如果是图片和视频回显,获取方式用Get,直接绑定src=预签名url就可以回显,如果是需要上传,那么预签名URL的获取方式要用PUT ,

public string GeneratePreSignedURL(string path)
{
    var request = new GetPreSignedUrlRequest
    {
        BucketName = bucketName,
        Key = path,
        //上传时用PUT
        //Verb = HttpVerb.PUT,
        //回显图片视频用Get,默认是GET
        Verb = HttpVerb.GET,
        //Expires = DateTime.Now.AddMinutes(200),
        Expires = DateTime.Now.AddMinutes(60),

        //ContentType = "binary/octet-stream"//must add this parameter
    };
    return s3Client.GetPreSignedURL(request);
}

请参考 使用预签名 URL 共享对象 - Amazon Simple Storage Service

 

S3对象的初始化,为了调用各种S3方法用

S3桶为了安全一般都设置成私有的,这种方式可以共享,上传对象,我是在构造里初始化好s3Client对象

public const string bucketName = "***bucket123";
public string accessKeyID = "AKIARLS***BT3HZAY";
public string secretKey = "R+WS7ul5BANYfpu***TPhGV1tv";

public IAmazonS3 s3Client;

public S3Demo()
{
    AmazonS3Config config = new AmazonS3Config()
    {
        ServiceURL = "http://s3.amazonaws.com",
        RegionEndpoint = Amazon.RegionEndpoint.USEast1
    };
    //AWSCredentials credentials;
    //credentials = new BasicAWSCredentials(accessKeyID, secretKey);
    s3Client = new AmazonS3Client(accessKeyID, secretKey, config);
}

获取文件夹下所有文件(包括子文件夹)的key,为了删文件夹下所有文件以及子文件遍历用

/// <summary>
/// Get objects under the specified folder in the Amazon S3 bucket.
/// </summary>
/// <param name="folderName">The specified folder in the Amazon S3 bucket.</param>
/// <returns>S3Objects list</returns>
public List<S3Object> GetFilesByFolder(string folderName)
{
    ListObjectsV2Request request = new()
    {
        BucketName = bucketName,
        Prefix = folderName
    };
    ListObjectsV2Response response = new();
    List<S3Object> fileNames = new();

    do
    {
        response = client.ListObjectsV2Async(request).GetAwaiter().GetResult();
        response.S3Objects.ForEach(obj => fileNames.Add(obj));
    }
    while (response.IsTruncated);

    return fileNames;
}

获取文件的二进制(字节数组),可以下载文件转流用

public async Task<byte[]> ReadObjectDataAsync(string keyName)
{
    try
    {
        GetObjectRequest request = new GetObjectRequest
        {
            BucketName = bucketName,
            Key = keyName
        };
        ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides();
        responseHeaders.CacheControl = "No-cache";
        request.ResponseHeaderOverrides = responseHeaders;
        using (GetObjectResponse response = await client.GetObjectAsync(request))
        using (Stream responseStream = response.ResponseStream)
        using (MemoryStream memStream = new MemoryStream())
        {
            responseStream.CopyTo(memStream);
            memStream.Seek(0, SeekOrigin.Begin);
            byte[] bytes = memStream.ToArray();
            return bytes;
        }
    }
    catch (AmazonS3Exception e)
    {
        // If bucket or object does not exist
        Console.WriteLine("Error encountered ***. Message:'{0}' when reading object", e.Message);
        return null;
    }
    catch (Exception e)
    {
        Console.WriteLine("Unknown encountered on server. Message:'{0}' when reading object", e.Message);
        return null;
    }
}

仅供学习参考,如有侵权联系我删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值