私はExpoを特に使用しませんでしたが、s3にアップロードできるようにRNプロジェクトをセットアップしました。投稿した例を考えると、私がやったことにかなり似ています。
明らかに、最初に行う必要があるのは、AWS S3のバケット設定です。 AWSコンソール内から、特定のアクセスキーとアクセス秘密を見つけることができるはずです。両方ともバケット名とともに必要になります。
あなたが掲示した例の背後にある考え方は、アクセスキーと秘密情報を安全に使用して画像をアップロードするために使用できる一意の「署名済み」URLを作成できる管理されたサーバーを持つことですあなたのバケツに直接。あなたはあなたのクライアントでこれをしたくないです。あなたのクライアント上に秘密を持っているだけで、ハッキングすることを求めています。クライアント上で何も完全に安全ではないと仮定します。
私はすでにアプリケーションのバックエンドとしてノードサーバーを構築していましたので、この部分を既に稼働させていました。バックエンドサーバーを初めて作成する場合は、Expressサーバーのセットアップ方法を調べることをお勧めしますhere。あなたはherokuのようなサービスで無料で(制限付きで)アプリをホストすることができます。もう少し詳細にこのプロセス全体を網羅した素晴らしい記事もありますhere。基本的には、あなたのクライアントアプリケーションでヒットすることができる別のGET
ルートを持つアプリを作成します。そのルートは、アップロードされるファイルのファイル名でクエリパラメータを受け入れます。アクセスキー、シークレット、バケット名、およびファイル名を取得するofficial aws sdkを使用して、クライアントアプリケーションに送り返す一意のURLを生成する必要があります。
クライアントアプリケーションが行うことは、アップロードが必要なファイルを準備することです。ファイルのファイル名を準備してから、Expressアプリケーションで設定したURLルートにGET
リクエストを送信してください。サーバーから応答が返ってくると、その一意のURLが含まれているはずです。私はreact native fetch blobライブラリを使って、今受信したその一意のURLにPUT
リクエストを実行しました。すべてがうまくいけば、はファイルをそのバケットに直接安全にアップロードする必要があります。アップロードするファイルの種類にヘッダーのContent-Type
を設定してください。
これはアップロードを行う一連のコードではありませんが、必要なことを理解し、正しい方向に向かうのに役立ちます。
ありがとうございます。あなたは本当にこのすべての仕組みを理解するのを助けました...そして、私が今述べたリンクの例を提供した紳士が何をしているのかを明確に理解していると思います...この入力: –
うれしそうに助かりました! –
こんにちは、あなたが曇っているのを気にしない場合は、アップロードする方法を示し、次にfirebaseに保存するURLをアップロードします https://medium.com/@ifeoluwaking24/how-to-upload-an-image-in -expo-react-native-to-firebase-using-cloudbase-24aac981c87 また、軽食を試すこともできますが、cloud_nameとupload_presetを追加してください。 https://snack.expo.io/@ifeking/upload-to -cloudinary –