web-dev-qa-db-ja.com

リモートサーバーからAmazon S3にファイルを直接アップロードするにはどうすればよいですか?

リモートサーバーからS3にファイルをアップロードすることはできますか?

リモートサーバーは、基本的にURLベースのファイルサーバーです。例: http://example.com/1.jpg を使用して、画像を提供します。それは他に何もせず、このサーバーでコードを実行することはできません。

別のサーバーにS3にhttp://example.com/1.jpgからファイルをアップロードするように指示することは可能です

           upload from http://example.com/1.jpg 
server -------------------------------------------> S3 <-----> example.com
19
Cory

サーバーでコードを実行したり、リクエストを実行したりできない場合は、できません。所有しているサーバーまたはコンピューターにファイルをダウンロードし、そこからアップロードする必要があります。

Amazon S3で実行できる操作は http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html で確認できます。

RESTとSOAP APIの両方の操作を確認すると、Amazon S3にリモートURLを与えてオブジェクトを取得させる方法がないことがわかります。すべてのPUTリクエストでは、リクエストの一部としてオブジェクトのデータを提供する必要があります。つまり、ウェブリクエストを開始しているサーバーまたはコンピュータにデータが必要です。

ユーザーのFacebookサムネイルをダウンロードし、サイトで使用するためにS3にアップロードしたいという過去に同様の問題がありました。私が行った方法は、Facebookからサーバーのメモリに画像をダウンロードしてから、Amazon S3にアップロードすることでした。 S3へのアップロードが完了したら、バケット/キーをデータベースに書き込みます。

残念ながら、それを行う他の方法はありません。

20
reach4thelasers

技術的には可能です AWS署名バージョン4を使用 、あなたのremote serverは下の画像の顧客です。メインサーバーでフォームを準備し、フォームフィールドをリモートサーバーに送信して、curlにすることができます。詳細な例 ここ

Amazon S3 upload using a POST request

1
Ayoub Kaanich

提供された提案はかなり良いと思います。ファイルをS3バケットにSCPできます。 PHPファイルを使用して、pemファイルにパスワードなしの認証を追加できます。拡張機能を検証できます。PHPファイルは、SCPコマンドの引数としてファイルを渡すことができます。

このソリューションの唯一の問題は、AWSにインスタンスが必要です。ウェブサイトが他のホスティングプロバイダーでホストされていて、S3バケットに直接ファイルをアップロードしようとしている場合は、このソリューションを使用できません。 =

1
Zamiul Hasan