0

ich diese Antwort immer wieder mit react-native-aws3 ein Bild zu AWS S3 aus dem Hochladen (Bild Screenshot von meinem redux dev Tools ist): enter image description hereTemporaryRedirect Fehler AWS S3 hochladen Bild von reagieren nativen

Ich verwende dieses redux beobachtbare Epos:

export const uploadImageEpic = action$ => 
    action$.ofType(UPLOAD_IMAGE) 
    .mergeMap(action => 
     Observable.fromPromise(
     RNS3.put(action.payload.file, action.payload.options) 
    ) 
     .map(response => uploadImageFulfilled(response)) 
     .catch(error => { 
      return Observable.of(uploadImageRejected(error.xhr.response)) 
     }) 
    ) 

die action.payload.file ist dies (Objekt aus Chromkonsole kopiert):

name: "image-5a430850-8314-497e-8d56-0df45e3fed95.jpg" 
type: "image/png" 
uri: "file:///storage/sdcard/Android/data/com.vepo/files/Pictures/image-5a430850-8314-497e-8d56-0df45e3fed95.jpg" 

die Optionen (Objekt von der Chrome-Konsole kopiert):

accessKey: "cant really give this away" 
bucket: "vepo-images" 
region: "ap-southeast-2" 
secretKey: "cant really give this away" 
successActionStatus: 201 

Also sowieso soll ich nochmal zum anderen Endpunkt versuchen. Also habe ich das zum Options-Objekt hinzugefügt: url: 'vepo-images.s3-ap-southeast-2.amazonaws.com' und ich habe die genaue Antwort von AWS zurückbekommen. Auch versucht s3-ap-southeast-2.amazonaws.com als die URL.

Irgendeine Idee, was ich diesbezüglich tun sollte?

Meine CORS Config für den heißen Stein:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>*</AllowedHeader> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 
</CORSConfiguration> 

Bucket Politik:

{ 
    "Id": "Policy1495174705604", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1495174695734", 
     "Action": "s3:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::vepo-images/*", 
     "Principal": "*" 
    } 
    ] 
} 

EDIT: es funktioniert jetzt, ohne Änderungen. Beide ohne ein url hinzugefügt zu dem option Objekt und mit url: 's3-ap-southeast-2.amazonaws.com. Also vielleicht ist die AWS S3 API etwas temperamentvoll ... was ein Problem sein könnte. Ich denke, ich werde nur 307 fangen und eine Wiederholung versuchen, die url param in und aus der options schalten.

Antwort

0

Sie sollten followRedirects = true für welchen HTTP-Client, den Sie verwenden, konfigurieren können.

Seine 307 könnte jetzt 302 später sein, und 301, wenn AWS wirklich verrückt geworden ist.

+0

Danke, ich glaube nicht, dass ich das tun kann, da ich [react-native-aws3] (https://github.com/benjreinhart/react-native-aws3) verwende, also verwende ich keinen HTTP-Client . Redirect-Handling könnte jedoch eine gute Feature-Anfrage sein. – BeniaminoBaggins