Amazons S3サービスを使用して、ユーザーがLAMPパッケージにアップロードするファイルを保存したいと考えています。これを行うのに最適なもの(時間、コスト、セキュリティなど)は何でしょうか。私はPHP処理でHTTPを使用してファイルをアップロードすることに慣れていますが、常にローカルストレージに保存しています。SDKをアップロードするtmpディレクトリが必要ですか、それともデータ変数からS3にファイルをアップロードする必要がありますか?また、5 GBのファイルを処理できるようにしたいのですが、現時点では0.5 GBのRAMしか実行していません。これにより、プロジェクトのアルファにいるときに問題が発生しますか?私のウェブサーバーはEC2サーバーであることに注意してください。助けてくれてありがとう。
1 に答える
Q1:一時ファイルを作成せずにメモリからアップロードします。
はい、できます。Amazon SDKには「putObjectFile」関数と「putObjectString」関数があり、最初は一時ファイルからオブジェクトを作成し、2番目は文字列からオブジェクトを作成します。
Q2:大きなファイル(5GB)をアップロードしています。
5GBのメモリを搭載したサーバーを入手することはできますが、アップロードの実行中にデータをメモリに完全にアップロードするためにデータを保存するのは少しやり過ぎです。そのため、一時ファイルをアップロードして、そのファイルからチャンクごとにストリーミングするのが賢明でしょう。 。PHPでcurlのチャンクを処理するには、アップロードのために一度にファイルのビットを読み取るCURLOPT_READFUNCTIONを追加する必要がある場合があります。
コールバック関数が3つのパラメーターを受け取るコールバック関数の名前。1つ目はcURLリソース、2つ目はオプションCURLOPT_INFILEを介してcURLに提供されるストリームリソース、3つ目は読み取られるデータの最大量です。コールバック関数は、要求されたデータの量以下の長さの文字列を返す必要があります。通常は、渡されたストリームリソースから文字列を読み取ります。EOFを通知するために空の文字列を返す必要があります。
カール関数はAmazonSDKのfunctionにありますgetResponse()
。クラスには「final」というラベルが付いているため、これを追加するには、SDKを実際に変更する必要があります。
Q3:コスト。(一時ファイルを保存するための)ハードディスクが少し大きいサーバーは、メモリを追加するよりも安価である可能性があります。
Q4:セキュリティ。一時ファイルはWebルートから保存できるため、Webサーバーと同じくらい安全です。Webサーバーが危険にさらされた場合でも、WebサーバーはAmazonシークレットキーを取得します。したがって、これは、アプリケーションの残りの部分を保護すること以上の懸念事項ではありません。