C# 将S3存储与.NET一起使用

C# 将S3存储与.NET一起使用,c#,.net,amazon-web-services,C#,.net,Amazon Web Services,我正在使用AWS.Net上传用户内容(图像)并将其显示在我的网站上。这是我的上传代码当前的样子: using (client = Amazon.AWSClientFactory.CreateAmazonS3Client()) { var putObjectRequest = new PutObjectRequest { BucketName = bucketName, InputStream = fileS

我正在使用AWS.Net上传用户内容(图像)并将其显示在我的网站上。这是我的上传代码当前的样子:

using (client = Amazon.AWSClientFactory.CreateAmazonS3Client())
    {
        var putObjectRequest = new PutObjectRequest
        {

            BucketName = bucketName,
            InputStream = fileStream,
            Key = fileName,
            CannedACL = S3CannedACL.PublicRead,
            //MD5Digest = md5Base64,
            //GenerateMD5Digest = true,
            Timeout = 3600000 //1 Hour
        };

        S3Response response = client.PutObject(putObjectRequest);
        response.Dispose();
}
存储这些文件路径的最佳方法是什么?有没有办法从回复中获取指向我的文件的链接?

目前我的网络配置中只有一个URL,如
https://s3.amazonaws.com//
然后,当我需要显示图像时,我获取该字符串并使用存储在db中的对象的键,该对象表示上传的文件。 有更好的方法吗?


它附带的所有示例都没有真正解决这种用法。而且文档不是在线的,我不知道在安装SDK后如何访问它,尽管我遵循了Amazon上的说明。

您在web.config中存储路径(包括存储桶名称)的方法与我相同,非常有效。然后,我将相对路径存储在各种数据库表中


这种方法的好处在于,它使迁移到不同的存储机制或CDN(如CloudFront)变得更容易。我认为没有比这种方法更好的方法了,因为如果您进行CNAME映射,S3文件驻留在不同的域或子域上,因此您的.NET运行时不会在同一个域或子域下运行

响应中还有一个“Location”属性,它直接指向S3Object所在的uri。

代码示例中只有一个+1!S3/SDK在上传时似乎默认为私有文件,而与bucket默认值无关。我发现的所有其他示例都显式设置了transfer实用程序使用的权限。输入流正是我想要的!