(私はAmazon AWS/S3を初めて使用するので、ご容赦ください)
私の最終的な目標は、ユーザーがWebブラウザーを使用してS3にファイルをアップロードできるようにすることです。私の要件は次のとおりです。
私の2部構成の質問は:
大きなファイルに対してこれを行うことさえ可能ですか?もしそうなら、どのように?
S3に直接アップロードできる場合、一時停止/再開を処理するにはどうすればよいですか?
PS。私はPHP 5.2 +を使用しています
一方、利用可能な AWS SDK for JavaScript(ブラウザー内) はAmazonS3をサポートし、クラス ManagedUpload を含めて、手元のユースケースのマルチパートアップロードの側面をサポートします(詳細については、前述の更新を参照してください)。これについて)。それに応じて、これがシナリオに最適なソリューションになる可能性があります。たとえば、 File APIを使用してローカルファイルをアップロードするHTML5 File API を順番に使用する簡潔な例-紹介ブログ投稿 AWSSDKでのAmazonS3マネージドアップローダーの発表JavaScriptの場合 は、このSDK機能の詳細を提供します。
私の最初の答えは明らかに要点を見逃していたので、明確にするために:
単純なHTMLフォームを介してブラウザベースのアップロードを実行する場合は、 POSTオブジェクト操作 の使用に制限されます。これは、HTMLフォームを使用して指定されたバケットにオブジェクトを追加します:
POSTは、オブジェクトをバケットに入れる方法としてブラウザベースのアップロードを可能にするPUTの代替形式です。 HTTPヘッダーを介してPUTに渡されるパラメーターは、代わりにフォームフィールドとしてmultipart/form-dataでエンコードされたメッセージ本文のPOSTに渡されます。 [...]
ここではアップロードが1回の操作で処理されるため、一時停止/再開はサポートされず、元の最大オブジェクトサイズ5ギガバイト(GB)以下に制限されます。
両方の制限を克服するには、 代わりにマルチパートアップロードにREST APIを使用 を使用する必要があります。これは、 AWS SDK for PHPなどのSDKで使用されます。 この機能を実装します。
これには明らかに、ブラウザを介して開始された操作を処理するサーバー(EC2など)が必要です(これにより、アクセス制御のために S3バケットポリシー および/または IAMポリシー も簡単に実行できます)。
1つの代替方法は、JavaScriptライブラリを使用し、このクライアント側を実行することです。たとえば、 jQuery UploadProgressおよびAJAX file upload (初期ポインターの場合)。 残念ながら、AWS用の正規のJavaScript SDKは利用できません( aws-lib は驚くべきことにまだS3をサポートしていません)-明らかに knox の一部のフォークがマルチパートアップロードを追加しています。 slakis's fork 、しかし、私はこれらのどちらも当面のユースケースには使用していません。
[大きなファイル]をS3に直接アップロードできる場合、一時停止/再開を処理するにはどうすればよいですか?
AWS SDK for PHP は、 Low-Level PHP API for Multipart Upload を使用したAmazonS3への大きなファイルのアップロードをサポートしています。
AWS SDK for PHPは、マルチパートアップロード用のAmazon S3 REST APIによく似た低レベルAPIを公開します(マルチパートアップロード用のREST APIの使用を参照)。 。 マルチパートアップロードを一時停止および再開する必要がある場合、アップロード中にパーツサイズを変更する必要がある場合、またはデータのサイズが事前にわからない場合は、低レベルAPIを使用してください。これらの要件がない場合は、高レベルAPIを使用してください(マルチパートアップロードに高レベルPHP APIを使用するを参照)。[私の強調]
AmazonS3はオブジェクトを処理できます1バイトから5テラバイト(TB)まで、それぞれの紹介記事を参照してください AmazonS3-オブジェクトサイズの制限が5TB :
[...]これで、顧客は非常に大きなファイルを単一のオブジェクトとして保存できるようになり、ストレージエクスペリエンスが大幅に簡素化されます。 Amazon S3は、お客様のために舞台裏で簿記を行うため、他のAmazon S3オブジェクトと同じように、その大きなオブジェクトを取得できるようになりました。
より大きなオブジェクトを保存するには、先月ブログで紹介した新しい Multipart Upload API を使用して、オブジェクトを部分的にアップロードします。 [...]
標準のHTTPPostよりも強力なものを提供するフラッシュアップローダーはありませんが、サーバー上の調整ソフトウェアを使用して、クライアント用に独自のフラッシュソフトウェアを開発できます。