【发布时间】:2014-04-15 14:45:39
【问题描述】:
我正在尝试通过 .Net / C# 通过 Amazon S3 API 访问外部存储桶。
我已经尝试过使用 3rd 方工具登录,它就像一个魅力,现在我想在框架内获取存储桶中的项目。我在代理后面使用它,这就是我使用 S3config 的原因。
AmazonS3Config S3Config = new AmazonS3Config()
{
CommunicationProtocol = Protocol.HTTP,
ProxyHost = Proxy.Host,
ProxyPort = Convert.ToInt32(Proxy.Port),
ProxyCredentials = new NetworkCredential
{
UserName = Proxy.User,
Password = Proxy.Password
}
};
AmazonS3 S3Client = Amazon.AWSClientFactory.CreateAmazonS3Client(AccessKey, SecretKey,S3Config);
这就是我与亚马逊建立连接的方式。我也已经试过放置
ServiceURL = "s3.amazonaws.com",
进入配置对象初始化程序,因为我在欧盟并且存储桶位于美国的某个地方。
当我现在尝试通过以下方式访问时:
ListObjectsRequest req = new ListObjectsRequest { BucketName = "yelp-syndication" };
ListObjectsResponse resp = S3Client.ListObjects(req);
或
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKeyID);
return client.ListBuckets().Buckets.Where(b => b.BucketName == bucket).Single();
或
ListObjectsRequest Request = new ListObjectsRequest
{
BucketName = BucketName
};
ListObjectsResponse Response = S3Client.ListObjects(Request);
我只在抛出的错误对象中得到拒绝访问。 我使用的凭据与 3rd 方工具中的凭据 100% 相同。
我在这里遗漏了什么吗?我是否需要使用任何我找不到的特殊方法来使其工作?
一个工作的 python sn-p 是:
from boto.s3.connection import S3Connection
conn = S3Connection(<ACCESS_KEY_ID>, <SECRET_ACCESS_KEY)
bucket = conn.get_bucket(<BucketName>, validate=False)
这会返回正确的结果,因此实际连接和凭据都有效。
【问题讨论】:
-
我遇到了同样的问题,你的服务 url 需要 http 或 https。为我工作。从错误的意义上说,文档很差。海事组织
-
我已经尝试过了,如果我将 http:// 添加到配置的 serviceurl 然后询问 listobjects,它实际上要求:bucketnamehttp://s3.amazonaws.com 并且失败了,因为这显然是无效的。
标签: c# amazon-web-services amazon-s3