【问题标题】:Using S3 Storage with .NET将 S3 存储与 .NET 结合使用
【发布时间】:2011-12-21 05:32:04
【问题描述】:

我正在使用 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();
}

存储这些文件路径的最佳方式是什么?有没有办法从响应中获取指向我的文件的链接?

目前,我的 webconfig 中只有一个 URL,例如 https://s3.amazonaws.com/<MyBucketName>/,然后当我需要显示图像时,我获取该字符串并使用我存储在数据库中的对象中的密钥,该密钥代表上传的文件。 有更好的方法吗?

它附带的所有示例都没有真正解决这种用法。而且文档不在线,我不知道在安装 SDK 后如何获取它,尽管按照亚马逊上的说明进行操作。

【问题讨论】:

  • 代码示例只需 +1! S3 / SDK 在上传时似乎默认为私有文件,无论存储桶默认值如何。我发现的所有其他显式设置权限的示例都使用了传输实用程序。输入流正是我所追求的!

标签: c# .net amazon-web-services


【解决方案1】:

您在 web.config 中存储包含存储桶名称的路径的方法与我所做的相同,效果很好。然后我只是将相对路径存储在各种数据库表中。

这种方法的好处在于,它可以更轻松地迁移到不同的存储机制或 CDN,例如 CloudFront。我认为没有比这种方法更好的方法,因为 S3 文件位于不同的域或子域(如果您进行 CNAME 映射),因此您的 .NET 运行时不会在相同的域或子域下运行。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 2010-11-06
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2014-03-17
      • 1970-01-01
      相关资源
      最近更新 更多