2017-11-02 1 views
0

Wir erstellen eine App mit React Native und die react-native-Image-Picker-Bibliothek.Reagieren Native Weird android Verhalten zeigt hochgeladene Bilder

Ich beginne mit dem Verhalten, das wir gerade haben: (auf Android-Gerät) Beim Hochladen eines Bildes (Profilbild) von der Bilderauswahl-Bibliothek ausgewählt gibt es keine Fehler, alles läuft reibungslos. Nach der Anfrage wird beim Zurückkehren zur Profilseite das gerade hochgeladene Bild nicht geladen. Das Neustarten/Erstellen/Löschen des Cache führt zur Behebung des Problems nicht aus.

Wenn ich auf meinem iOS Simulator/Android Emulator auf dem gleichen Konto sehe, sehe ich das Bild vom Gerät hochgeladen.

tl: dr Ich lade ein Bild von einem Android-Gerät, (Hochgeladen korrekt, kann es im Browser sehen) Kann es nicht auf dem gleichen Gerät sehen, aber ich kann es auf anderen Geräten/Simulatoren sehen.

Ich habe keine Ahnung was los ist, würde eine schnelle Antwort lieben, da das Problem eine Veröffentlichung verzögert.

Hier ist, wo ich das Bild von der Bildauswahl erhalten.

ImagePicker.showImagePicker(options, (response) => { 
    if (response.error) { 
    this.props.setError(I18n.t('editProfile.fields.profileImage.error')); 
    } else if (!response.didCancel) { 
    if (Platform.OS === 'ios') { 
     const image = { 
     uri: response.uri.replace('file://', ''), 
     filename: 'ProfileImage', 
     height: response.height, 
     isStored: false, 
     width: response.width, 
     }; 

     this.props.onSubmit(image); 
    } else { 
     const image = { 
     uri: response.path, 
     filename: 'ProfileImage', 
     height: response.height, 
     isStored: true, 
     width: response.width, 
     }; 

     this.props.onSubmit(image); 
    } 
    } 
}); 

Hinweis: Diese Funktionalität funktioniert perfekt auf iOS.

+0

Welche URI verwenden Sie, um das übermittelte Bild anzuzeigen? –

+0

Ich benutze eine Amazon S3 URL. –

+0

Die Schaltfläche zum Senden ist eine Upload-Funktion –

Antwort

0

Das Problem verursacht wurde, basierend auf welchem ​​Bild hochgeladen wurde. Es scheint ein Problem mit älteren Android-Geräten zu geben.

0

Ich hatte ein ähnliches Problem mit AWS S3, aber in meinem Fall war das Problem, dass der Content-Type/Mime-Typ nicht festgelegt wurde. Ich musste es manuell einstellen.

Dieser Teil meines Codes ist:

s3 = new AWS.S3(); 

     var extension = ".jpg"; 
     if (img.mime.indexOf(".png") > -1) 
     extension = ".png"; 

     var key = "Reports/" + req.body.id + "/" + date.getTime() + "/Image" + extension; 

     var buf = new Buffer(img.data,'base64'); 

     var params = { 
     Bucket: 'XXXXXXXXXXXXX', 
     Key: key, 
     Body: buf, 
     ContentEncoding: 'base64', 
     ContentType: img.mime, 
     ACL: 'public-read' 
     }; 

     console.log("S3 Start"); 
     var upload = s3.upload(params, function(err,data) { 
     if (err) { 
      console.log(err, err.stack); 
     } else { 
      console.log(data); 
      s3Url = data.Location; 
     } 
+0

Würde dies nicht dazu führen, dass es nicht auf den anderen Geräten angezeigt wird? –

+0

Ich erinnere mich, dass das, was mir geschah, war, dass das Bild heruntergeladen wurde, anstatt es anzuzeigen, weil es als Oktett-Binärdatei erkannt wurde. Aber einige Browser zeigten tatsächlich das Bild. Ich erwähne das nur, weil du gesagt hast, dass du S3 benutzt. Wurde das Bild tatsächlich korrekt hochgeladen? – sfratini

+0

Ja, das Bild ist korrekt hochgeladen, es zeigt sich auf anderen Geräten und Simulatoren. –