![](/img/trans.png)
[英]Why is uploading a file to s3 via the C# AWS SDK giving a permission denied error?
[英]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.