リモートサーバーからS3にファイルをアップロードすることはできますか?
リモートサーバーは、基本的にURLベースのファイルサーバーです。例: http://example.com/1.jpg を使用して、画像を提供します。それは他に何もせず、このサーバーでコードを実行することはできません。
別のサーバーにS3にhttp://example.com/1.jpg
からファイルをアップロードするように指示することは可能です
upload from http://example.com/1.jpg
server -------------------------------------------> S3 <-----> example.com
サーバーでコードを実行したり、リクエストを実行したりできない場合は、できません。所有しているサーバーまたはコンピューターにファイルをダウンロードし、そこからアップロードする必要があります。
Amazon S3で実行できる操作は http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html で確認できます。
RESTとSOAP APIの両方の操作を確認すると、Amazon S3にリモートURLを与えてオブジェクトを取得させる方法がないことがわかります。すべてのPUTリクエストでは、リクエストの一部としてオブジェクトのデータを提供する必要があります。つまり、ウェブリクエストを開始しているサーバーまたはコンピュータにデータが必要です。
ユーザーのFacebookサムネイルをダウンロードし、サイトで使用するためにS3にアップロードしたいという過去に同様の問題がありました。私が行った方法は、Facebookからサーバーのメモリに画像をダウンロードしてから、Amazon S3にアップロードすることでした。 S3へのアップロードが完了したら、バケット/キーをデータベースに書き込みます。
残念ながら、それを行う他の方法はありません。
技術的には可能です AWS署名バージョン4を使用 、あなたのremote server
は下の画像の顧客です。メインサーバーでフォームを準備し、フォームフィールドをリモートサーバーに送信して、curl
にすることができます。詳細な例 ここ 。
提供された提案はかなり良いと思います。ファイルをS3バケットにSCPできます。 PHPファイルを使用して、pemファイルにパスワードなしの認証を追加できます。拡張機能を検証できます。PHPファイルは、SCPコマンドの引数としてファイルを渡すことができます。
このソリューションの唯一の問題は、AWSにインスタンスが必要です。ウェブサイトが他のホスティングプロバイダーでホストされていて、S3バケットに直接ファイルをアップロードしようとしている場合は、このソリューションを使用できません。 =