【问题标题】:AWS upload - bucket not foundAWS 上传 - 未找到存储桶
【发布时间】:2016-10-14 12:40:05
【问题描述】:

我在 app.config 中有这个:

  <appSettings>
    <add key="AWSProfileName" value="myName"/>
    <add key="AWSRegion" value="eu-west-1" />
  </appSettings>

然后我尝试运行这个:

using Amazon.S3;
using Amazon.S3.Model;

namespace createCSV
{
  class S3
  {

  public void uploadObject()
  {
    //IAmazonS3 client;
    string AwsAccessKey = "xxxxxxxxxxxxx";
    string AwsSecretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    IAmazonS3 client = new AmazonS3Client(AwsAccessKey,AwsSecretKey);
    PutObjectRequest request = new PutObjectRequest()
    {
      BucketName = @"http://s3-eu-west-1.amazonaws.com/bucketName/",
      Key = @"test/blah.txt",
      FilePath = @"P:\data_analysis\foo\blah.txt"
    };
    PutObjectResponse response2 = client.PutObject(request);   //<<exception here
  }

  }
}

我在标记为:

输出>>

无法找到或打开 PDB 文件。抛出异常: AWSSDK.dll 中的“Amazon.S3.AmazonS3Exception”

AmazonS3exception 未处理:

发生“Amazon.S3.AmazonS3Exception”类型的未处理异常 在 AWSSDK.dll 中

附加信息:指定的存储桶不存在

我已经为BucketName = @"http://s3-eu-west-1.amazonaws.com/bucketName/" 行尝试了许多不同的配置,但仍然是相同的例外 - 谁能帮忙?

【问题讨论】:

  • 检查网址是否正确。
  • @viveknuna 如果我将 url 添加到浏览器中,它不会给出 404,而是转到一个页面说访问被拒绝,这看起来不错?
  • 使您的资源无效,然后尝试。
  • 使用小写的存储桶名称。 Bucket restrictions 在使用名为 MyAWSBucket 的存储桶时有一个确切错误情况的示例,该存储桶解析为 myawsbucket 并以未找到存储桶错误结束。
  • 如此处所示 (docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html) BucketName 应该只是存储桶的名称,而不是整个 URL。您可以在创建 AmazonS3Client 对象时指定服务端点。

标签: c# amazon-web-services amazon-s3


【解决方案1】:

我想,你忘了在 PutObjectRequest 中插入 BucketName 属性。 请参阅下面的示例将文件上传到 AmazonS3。

        string secretKey = "your secret key";
        string accessKey = "your access key";
        AmazonS3Client client = new AmazonS3Client(secretKey, accessKey, RegionEndpoint.EUWest1);// choose your region endpoin for this example I am usgin eu-west-1
        PutObjectRequest uploadObjectRe = new PutObjectRequest()
        {
            BucketName = "qabucketireland",//your bucket name not full URL
            Key = "test/blah.txt",
            FilePath = @"c:\documents\script.txt"
        };
        client.PutObject(uploadObjectRe);

另一种上传文件的方法可能是使用 TransferUtility 类,请参见下面的示例:

            string secretKey = "your secret key";
            string accessKey = "your access Key";
            AmazonS3Client client = new AmazonS3Client(secretKey, accessKey, RegionEndpoint.EUWest1);
            TransferUtility transfer = new TransferUtility(client);
            transfer.Upload(@"c:\documents\script - Copy.txt", "qabucketireland", @"test/blah2.txt");

您也可以阅读此“How to upload a file to amazon S3 super easy using c#

【讨论】:

    【解决方案2】:

    PutObjectRequestBucketName 参数应该是存储桶的名称(例如 bucketName),而不是完全限定的端点(例如 http://s3-eu-west-1.amazonaws.com/bucketName/)。您可以找到有关 SDK 的更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2021-02-07
      相关资源
      最近更新 更多