2017-02-11 3 views
0

Ich versuche, Dateien zwischen S3-Buckets in Unity zu übertragen und kryptische Fehler zu finden, auf denen ich keine Dokumentation finden kann. Beide Buckets gehören demselben Konto an.Übertragen von Dateien zwischen Amazon S3-Buckets in Unity

Immer wenn ich ein Asset erstelle, lade ich es auf S3-Server im Dev Bucket hoch, was großartig funktioniert. Wenn ich bereit bin, Assets zu aktivieren, möchte ich eine Liste der Assets durchgehen, die im Prod Bucket fehlen, und sie vom Dev Bucket übertragen. Aus meiner Forschung ist IAmazonS3. CopyObjectAsync() die Funktion, die diese Aufgabe ausführen soll. Die IAmazonS3.CopyObject()function ist nicht in Amazon Unity SDK verfügbar.

Hier ist der Code, den ich anrufen, während das Objekt zu kopieren versuchen:

public void TestCopy() 
{ 
    var request = new CopyObjectRequest() 
    { 
     SourceBucket = mLoginData.DevBucket, 
     SourceKey = "myPic.jpg", 
     DestinationBucket = mLoginData.ProdBucket, 
     DestinationKey = "myPic.jpg" 
    }; 

    AWSConfigs.HttpClient = AWSConfigs.HttpClientOption.UnityWebRequest; 

    Client.CopyObjectAsync(request,(responseObj) => 
    { 
     if (responseObj.Exception == null) 
     { 
      ResultText.text += "Copied Object"; 
     } 
     else 
     { 
      ResultText.text += "Got Exception: \n" + responseObj.Exception.ToString(); 
     } 
    }); 
} 

Dies führt zu einem "Verschoben" Fehlercode, der nicht in den Amazon Error Code documentation erwähnt wird:

Got Exception: 
Amazon.S3.AmazonS3Exception: Error making request with Error Code Moved and Http Status Code Moved. No further error information was returned by the service. Response Body: Encountered invalid redirect (missing Location header?) ---> Amazon.Runtime.Internal.HttpErrorResponseException: Exception of type 'Amazon.Runtime.Internal.HttpErrorResponseException' was thrown. 
at Amazon.Runtime.Internal.UnityRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
at Amazon.Runtime.Internal.HttpHandler`1[System.String].GetResponseCallbackHelper (System.Object state) [0x00000] in <filename unknown>:0 
--- End of inner exception stack trace --- 
at Amazon.Runtime.Internal.HttpErrorResponseExceptionHandler.HandleException (IExecutionContext executionContext, Amazon.Runtime.Internal.HttpErrorResponseException exception) [0x00000] in <filename unknown>:0 
at Amazon.Runtime.Internal.ExceptionHandler`1[T].Handle (IExecutionContext executionContext, System.Exception exception) [0x00000] in <filename unknown>:0 
at Amazon.Runtime.Internal.ErrorHandler.ProcessException (IExecutionContext executionContext, System.Exception exception) [0x00000] in <filename unknown>:0 
at Amazon.Runtime.Internal.ErrorHandler.InvokeAsyncCallback (IAsyncExecutionContext executionContext) [0x00000] in <filename unknown>:0 

Ich weiß, dass ich in der Lage bin, Buckets anzuzeigen/aufzulisten, Dateien in beiden Buckets hochzuladen/aufzulisten/zu löschen usw. Es ist wichtig, dass die Lösung vom Unity Editor ausgeführt wird.

+0

Sind diese neuen Eimer? –

+0

Nein, dies sind Buckets, die bereits eine Menge Dinge in ihnen haben, die in den letzten 4 Monaten oder so verwendet wurden. –

Antwort

0

Es stellt sich heraus, dass CopyObjectAsync eine Instanz des IAmazonS3-Client verwendet werden muss, die mit der Zielregion konfiguriert ist, nicht die Source-Region. Das Ändern erlaubte die Kopie gerade gut.

0

Basierend auf umfangreichen Erfahrungen mit der API S3 arbeitet direkt, ich bin ziemlich sicher, dass dies Ihr Fehler ist:

PermanentRedirect

The bucket you are attempting to access must be addressed using the specified endpoint. Send all future requests to this endpoint.

301 Moved Permanently

ich die zugrunde liegende Bibliothek glauben, dass dies von Ihnen versteckt und der Moved Fehler ist, dass Bibliothek Interpretation des Fehlers 301. Warum das sinnvoll wäre, ergibt keinen Sinn, aber ich arbeite lieber direkt mit der S3 REST API.

Encountered invalid redirect (missing Location header?) 

Dies entspricht dem dokumentierten Verhalten.

To help you find these errors during development, this type of redirect does not contain a Location HTTP header that allows you to automatically follow the request to the correct location. Consult the resulting XML error document for help using the correct Amazon S3 endpoint.

http://docs.aws.amazon.com/AmazonS3/latest/dev/Redirects.html

Wenn es einen Weg gibt, diese XML-Antwort zu erhalten, kann es hilfreich sein.

Dieser Fehler tritt innerhalb der ersten Minuten der Bucket-Erstellung auf, wenn Sie auf einen Bucket mit dem globalen Endpunkt (nicht regionspezifisch) zugreifen und der Bucket sich in einer anderen Region als us-east-1 befindet Ich fragte, ob die Eimer neu seien.

Wenn sich die Buckets nicht in us-east-1 befinden, müssen Sie wahrscheinlich eine Region irgendwo in Ihrem Code übergeben, da der oben genannte Fehler darauf hindeutet, dass Ihre Anforderungen am falschen regionalen Endpunkt ankommen.

+1

Es ist so, dass der Quell-Bucket in US-West-2 und der Ziel-Bucket in US-East-1 ist . Ich habe das gerade herausgefunden, und es scheint mit Ihrer Schlussfolgerung übereinzustimmen. Ich werde versuchen, einen Regionscode in der Kopierfunktion zu übergeben und zu lesen, wie ich zwischen regionalen Buckets übersetze. Danke für die Richtung! –

Verwandte Themen