当bucket名称包含句点(dots)通过c#SDK时,在S3上上载文件时出错
我已经在S3上创建了两个bucket,分别命名为“demobucket”和“demo.bucket”。 当我在“demobucket”上上传任何文件时,它工作正常。但当我在“demo.bucket”上上传文件时,它给了我一个错误“达到的最大重试次数:3” 我担心的是,当bucket名称包含句点(dots)时,上传文件时会出现什么问题 我的代码是:当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
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
};