【问题标题】:Error in uploading file on S3 when bucket name containing periods(dots) through c# SDK当存储桶名称包含句点(点)时,通过 c# SDK 在 S3 上上传文件时出错
【发布时间】:2013-06-01 01:54:51
【问题描述】:

我在 S3 上创建了两个存储桶,分别命名为“demobucket”和“demo.bucket”。 当我在“demobucket”上上传任何文件时,它工作正常。但是当我在“demo.bucket”上上传文件时,它给了我一个错误“达到最大重试次数:3”

我担心的是,当存储桶名称包含句点(点)时,上传文件有什么问题。

我的代码是:

public static bool UploadResumeFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType)
    {
        try
        {
            AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY);

PutObjectRequest request = new PutObjectRequest();
            request.WithKey(uploadAsFileName);
            request.WithInputStream(ImageStream);
            request.WithBucketName("demo.bucket");
            request.CannedACL = filePermission;
            request.StorageClass = storageType;

            client.PutObject(request);
            client.Dispose();
        }
        catch
        {
            return false;
        }
        return true;
    }

【问题讨论】:

  • 我会将存储桶名称作为参数添加到您的方法中并重新运行。这 2 个存储桶在同一个帐户下,具有相同的设置?
  • @Mzf:如果我像我一样将存储桶名称作为参数传递和静态传递,有什么区别吗?并且这 2 个存储桶在同一个帐户和同一个区域下。
  • 嗯,根据我的经验,在存储桶名称中使用句点没有问题。
  • 您使用的是哪个版本的适用于 .NET 的 AWS 开发工具包?
  • @WadeMatveyenko:这是 1.3 版

标签: c# file-upload amazon-s3


【解决方案1】:

当存储桶名称包含句点时,与 S3 建立安全连接时出现问题。这个问题在这里得到了很好的解释:http://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html

一种解决方案是创建您的 S3 客户端并传递第三个参数,使其使用 HTTP 而不是 HTTPS。见Amazon S3 C# SDK "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel." Error

    AmazonS3Config S3Config = new AmazonS3Config()
    {
        ServiceURL = "s3.amazonaws.com",
        CommunicationProtocol = Protocol.HTTP,
        RegionEndpoint = region
    };

但是,请注意,这并不安全,亚马逊也不推荐这样做。您的秘密访问密钥可能会被截获。我还没有找到一种将文件上传到名称中带有句点的存储桶的安全方法。

如果您使用的是最新版本的 AWSSDK.dll(至少 2.0.13.0),则可以改为:

    AmazonS3Config S3Config = new AmazonS3Config()
    {
        ServiceURL = "s3.amazonaws.com",
        ForcePathStyle = true,
        RegionEndpoint = region
    };

这会强制 S3Client 使用您的存储桶的路径版本,从而避免该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 2017-10-04
    • 2015-12-15
    • 1970-01-01
    • 2021-09-09
    • 2015-10-28
    • 2018-08-19
    • 2015-02-23
    相关资源
    最近更新 更多