【问题标题】:AWS S3 PreSignedUrl Upload ErrorAWS S3 PreSignedUrl 上传错误
【发布时间】:2016-09-30 16:16:03
【问题描述】:

我正在尝试使用 .Net SDK 将文件上传到 S3 存储,并且在 PUT 到 AWS 提供的预签名 URL 时看到以下错误响应:

您尝试访问的存储桶必须使用指定的端点进行寻址

这是 .Net 代码 - 我已确认我的存储桶位于 USWest2。

var amazonS3Client = new AmazonS3Client(accessKey, secretKey, RegionEndpoint.USWest2);
    // Generate a pre-signed URL.
    string folderName = "MyFolder";
    string key = "TestKey";
    GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
    {
      BucketName = _bucketName,
      Key = folderName + "/" + key,
      Verb = HttpVerb.PUT,
      Expires = DateTime.Now.AddMinutes(5)
    };
    var uri = Uri(_amazonS3Client.GetPreSignedURL(request));

    // Upload a file using the pre-signed URL.
    Stream stream = ... // This is set elsewhere, contains a data stream.
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
    HttpWebRequest httpRequest = WebRequest.Create(uri) as HttpWebRequest;
    httpRequest.Method = "PUT";
    using (Stream dataStream = httpRequest.GetRequestStream())
    {
      byte[] buffer = new byte[8000];
      int bytesRead = 0;
      while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
      {
        dataStream.Write(buffer, 0, bytesRead);
      }
    }
    HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;
    if(response.StatusCode != HttpStatusCode.OK)
      throw new Exception("Error uploading to AWS: " + response.StatusDescription);

【问题讨论】:

    标签: .net amazon-web-services amazon-s3


    【解决方案1】:

    这最终是因为调用返回的URL:

    var uri = Uri(_amazonS3Client.GetPreSignedURL(request));
    

    格式为:

    https://s3-us-west-2.amazonaws.com/....
    

    但 AWS 将其重定向到:

    https://s3.amazonaws.com/....
    

    通过使用后一个 URL 作为我的“预签名 URL”的开头,文件现在可以正确上传。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2016-11-21
      • 2020-08-11
      • 1970-01-01
      • 2021-02-24
      • 2020-08-11
      相关资源
      最近更新 更多