簡體   English   中英

通過C#SDK在存儲桶名稱中包含句點(點)時,在S3上上傳文件時出錯

[英]Error in uploading file on S3 when bucket name containing periods(dots) through c# SDK

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

當存儲桶名稱包含句點時,建立與S3的安全連接存在問題。 該問題在這里得到了很好的解釋: http : //shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html

一種解決方案是創建傳遞第三個參數的S3客戶端,該參數使它使用HTTP而不是HTTPS。 請參閱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使用存儲桶路徑的版本,從而避免了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM