2016-09-30 19 views
0

私はネットSDKを使用したS3ストレージにファイルをアップロードしようとしている、とAWSが提供する事前に署名したURLにPUTingすると、次のエラーレスポンスを見ています:AWS S3 PreSignedUrlアップロードエラー

あなたはバケツを指定されたエンドポイントを使用してアドレス指定する必要があります。

ここに.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); 

答えて

0

URLは、呼び出しによって返されるので、これが最終的に引き起こされた:

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

はフォーマットであった:

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

しかし、AWSはこれをリダイレクト:

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

後者のURLを私の "署名済みURL"の始まりで、ファイルが正しくアップロードされるようになりました。