当bucket名称包含句点(dots)通过c#SDK时,在S3上上载文件时出错

当bucket名称包含句点(dots)通过c#SDK时,在S3上上载文件时出错,c#,file-upload,amazon-s3,C#,File Upload,Amazon S3,我已经在S3上创建了两个bucket,分别命名为“demobucket”和“demo.bucket”。 当我在“demobucket”上上传任何文件时,它工作正常。但当我在“demo.bucket”上上传文件时,它给了我一个错误“达到的最大重试次数:3” 我担心的是,当bucket名称包含句点(dots)时,上传文件时会出现什么问题 我的代码是: public static bool UploadResumeFileToS3(string uploadAsFileName, Stream Ima

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

我担心的是,当bucket名称包含句点(dots)时,上传文件时会出现什么问题

我的代码是:

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;
    }

当bucket名称包含句点时,建立到S3的安全连接存在问题。这里很好地解释了这个问题:

一种解决方案是创建S3客户机,通过第三个参数使其使用HTTP而不是HTTPS。看

但是,请注意,这是不安全的,亚马逊不建议这样做。您的秘密访问密钥可能被截获。我还没有找到一种安全的方法将文件上传到名称中带有句号的bucket中

如果您使用的是AWSSDK.dll的最新版本(至少2.0.13.0),则可以执行以下操作:

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

这将强制S3客户端使用存储桶路径的版本,从而避免出现问题。

我会将存储桶名称作为参数添加到方法中,然后重新运行。这两个bucket在同一个账号下,设置相同?@Mzf:如果我像我一样将bucket name作为参数和static传递,有什么区别吗。这两个bucket位于同一帐户和同一地区。根据我的经验,在bucket名称中使用句点是没有问题的。您使用的是用于.NET的AWS SDK的哪个版本?@WadeMatveyenko:版本1.3
    AmazonS3Config S3Config = new AmazonS3Config()
    {
        ServiceURL = "s3.amazonaws.com",
        ForcePathStyle = true,
        RegionEndpoint = region
    };