2017-11-02 3 views
0

React Nativeとreact-native-image-pickerライブラリを使用してアプリを構築しています。React Nativeアップロードされた画像を表示する奇妙なアンドロイドの振る舞い

私たちは今すぐ行動し始めます: (Androidデバイスの場合)画像ピッカーライブラリで選択した画像(プロフィール画像)をアップロードするときにエラーはありません。 プロファイルページに戻るときに、私たちがアップロードした画像はロードされていません。再始動/構築/キャッシュのクリアは問題を解決するために何もしません。

私のiOSシミュレータ/アンドロイドエミュレータを同じアカウントで見ると、デバイスからアップロードされた画像が表示されます。

tl:drアンドロイドデバイスから画像をアップロードする(正しくアップロードするとブラウザで見ることができます)同じデバイスでは見ることができませんが、他のデバイス/シミュレータで見ることができます。

私は何が起こっているのか分かりません。問題がリリースを遅らせるため、速い答えが大好きです。

ここで私は画像ピッカーから画像を取得します。

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); 
    } 
    } 
}); 

注:この機能はiOSで完全に機能します。

+0

送信した画像を表示するために使用しているURIは何ですか? –

+0

私はamazone s3のURLを使用しています。 –

+0

送信ボタンはアップロード機能です –

答えて

0

問題がアップロードされたものを画像に基づいて発生しました。 古いAndroid搭載端末に問題があるようです。

0

AWS S3でも同様の問題がありましたが、私の場合、コンテンツタイプ/ MIMEタイプが設定されていないという問題がありました。私は手動でそれを設定しなければならなかった。

これは私のコードの一部です:

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

これは他のデバイスに表示されませんか? –

+0

私に起こったことは、画像がオクターブバイナリとして検出されたために表示される代わりにダウンロードされていたことです。しかし、一部のブラウザでは実際に画像が表示されていました。私はあなたがS3を使っていると言ったので、これだけを言います。画像は実際に正しくアップロードされていますか? – sfratini

+0

画像が正しくアップロードされました。他のデバイスやシミュレータに表示されます。 –