質問: 現在クライアントサイトでReactNative、サーバーサイド(API・DB)でRailsとmysqlを用いたモバイルアプリを開発しています。 クライアントサイドでアップロードされた画像をRailsのAPIからS3に保存にしようとしているのですが、その方法がわからず迷ってしまっています。 現在の方針と分からない点 ------------- ReactNativeから画像のアップロードはreact-native-image-pickerを用いて行おうとしています。 このライブラリを用いると、ユーザーがアップロードした画像のbase64のバイナリデータや画像のuriを受け取ることが出来ます。 参照: これらのデータを使って、サーバーサイドに画像を渡したいのですが、その方法がわかりません。 データURIの形式( `{ uri: 'data:image/jpeg;base64,' + response.data}` )でサーバーサイドにPOSTしようとすると、そもそもbase64部分のデータの形式が大きすぎて、処理が終わりません。 また画像のuriのみ( `{ uri: response.uri }` )を渡そうとしても、サーバーサイドではuriの文字列としてしか認識されず、画像として処理できません。 どのようにすればreact-native-image-pickerが返してくれるレスポンスを元にサーバーサイドに画像情報をPOSTできるか、ご教授いただけないでしょうか?(サンプルコードなどあると尚嬉しいです) (ライブラリどうこう、というよりも、クライアントからサーバーサイドに画像をアップロードする仕組みをちゃんと理解できてないのかもしれません..「この辺呼んで◯◯を理解したほうが良いよ」というのがあれば、そちらも教えて頂けると嬉しいです。)
回答: FormDataを使っていますか? https://github.com/facebook/react-native/blob/dabb78b1278d922e18b2a84059460689da12578b/RNTester/js/XHRExampleFormData.js#L105 また、本筋とは外れますがS3に上げるならRails経由ではなくクライアントから直接S3にアップロードする方法も検討されると良いと思います。presigned urlを使用した場合のコードはこちらに参考があります(自分のブログですが): http://taiki-t.hatenablog.com/entry/2017/03/07/215149