2013-06-05 20 views
0

我在S3上創建了兩個存儲桶,名稱類似於「demobucket」和「demo.bucket」。 當我在「demobucket」上傳任何文件時,它工作正常。但是當我上傳「demo.bucket」文件時,它給了我一個錯誤「最大重試次數達到3次」當通過c#SDK包含句點(點)的存儲桶名稱在S3上上載文件時出錯

我擔心的是,當存儲桶名稱包含句點(點)時上傳文件有什麼問題, 。

我的代碼是:

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

我會將Bucket名稱作爲參數添加到您的方法並重新運行。這兩個桶是在同一個帳戶下,具有相同的設置? – Mzf

+0

@Mzf:如果我將桶名作爲參數傳遞並且像我一樣靜態,那麼是否有任何區別。而這兩個桶在同一賬戶和同一地區。 –

+0

那麼,根據我的經驗,在桶名中使用句點沒有問題。 – Mzf

回答

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使用路徑的版本,以你的水桶這避免了這個問題。

+0

感謝這個信息... :) –

相關問題