0

S3 に「demobucket」と「demo.bucket」という名前の 2 つのバケットを作成しました。「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;
    }
4

1 に答える 1

1

バケット名にピリオドが含まれている場合、S3 への安全な接続を確立する際に問題が発生します。この問題は、http ://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html で詳しく説明されています。

1 つの解決策は、HTTPS の代わりに HTTP を使用するようにする 3 番目の引数を渡す S3 クライアントを作成することです。Amazon S3 C# SDK の「基礎となる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした」を参照してください。エラー

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

ただし、これは安全ではなく、Amazon は推奨していないことに注意してください。シークレット アクセス キーが傍受される可能性があります。名前にピリオドが含まれるバケットにファイルをアップロードする安全な方法をまだ見つけていません。

AWSSDK.dll の最新バージョン (少なくとも 2.0.13.0) を使用している場合は、代わりにこれを実行できます。

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

これにより、S3Client は問題を回避するバケットへのパスのバージョンを使用するようになります。

于 2014-04-02T19:44:02.307 に答える