web-dev-qa-db-ja.com

履歴書をサポートして大きなファイルをS3にアップロードする

(私はAmazon AWS/S3を初めて使用するので、ご容赦ください)

私の最終的な目標は、ユーザーがWebブラウザーを使用してS3にファイルをアップロードできるようにすることです。私の要件は次のとおりです。

  1. 大きなファイル(2GB以上)を処理する必要があります
  2. 進行状況インジケーターで一時停止/再開をサポートする必要があります
  3. (オプションですが望ましいです!)接続が一時的に切断された場合にアップロードを再開する機能

私の2部構成の質問は:

  • S3マルチパートアップロードについて読みましたが、ウェブブラウザベースのアップロードに一時停止/再開を実装する方法が明確ではありません。

大きなファイルに対してこれを行うことさえ可能ですか?もしそうなら、どのように?

  • ファイルをEC2にアップロードし、完了したらS3に移動する必要がありますか?一時ファイルを使用する代わりに、ファイルをS3に直接(安全に)アップロードできますか?ウェブサーバー?

S3に直接アップロードできる場合、一時停止/再開を処理するにはどうすればよいですか?

PS。私はPHP 5.2 +を使用しています

19
style-sheets

20150527を更新

一方、利用可能な AWS SDK for JavaScript(ブラウザー内) はAmazonS3をサポートし、クラス ManagedUpload を含めて、手元のユースケースのマルチパートアップロードの側面をサポートします(詳細については、前述の更新を参照してください)。これについて)。それに応じて、これがシナリオに最適なソリューションになる可能性があります。たとえば、 File APIを使用してローカルファイルをアップロードするHTML5 File API を順番に使用する簡潔な例-紹介ブログ投稿 AWSSDKでのAmazonS3マネージドアップローダーの発表JavaScriptの場合 は、このSDK機能の詳細を提供します。

更新20120412

私の最初の答えは明らかに要点を見逃していたので、明確にするために:

単純なHTMLフォームを介してブラウザベースのアップロードを実行する場合は、 POSTオブジェクト操作 の使用に制限されます。これは、HTMLフォームを使用して指定されたバケットにオブジェクトを追加します

POSTは、オブジェクトをバケットに入れる方法としてブラウザベースのアップロードを可能にするPUTの代替形式です。 HTTPヘッダーを介してPUTに渡されるパラメーターは、代わりにフォームフィールドとしてmultipart/form-dataでエンコードされたメッセージ本文のPOSTに渡されます。 [...]

ここではアップロードが1回の操作で処理されるため、一時停止/再開はサポートされず、元の最大オブジェクトサイズ5ギガバイト(GB)以下に制限されます。

両方の制限を克服するには、 代わりにマルチパートアップロードにREST AP​​Iを使用 を使用する必要があります。これは、 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 AP​​I for Multipart Upload を使用したAmazonS3への大きなファイルのアップロードをサポートしています。

AWS SDK for PHPは、マルチパートアップロード用のAmazon S3 REST AP​​Iによく似た低レベルAPIを公開します(マルチパートアップロード用のREST AP​​Iの使用を参照)。 。 マルチパートアップロードを一時停止および再開する必要がある場合、アップロード中にパーツサイズを変更する必要がある場合、またはデータのサイズが事前にわからない場合は、低レベルAPIを使用してください。これらの要件がない場合は、高レベルAPIを使用してください(マルチパートアップロードに高レベルPHP AP​​Iを使用するを参照)。[私の強調]

AmazonS3はオブジェクトを処理できます1バイトから5テラバイト(TB)まで、それぞれの紹介記事を参照してください AmazonS3-オブジェクトサイズの制限が5TB

[...]これで、顧客は非常に大きなファイルを単一のオブジェクトとして保存できるようになり、ストレージエクスペリエンスが大幅に簡素化されます。 Amazon S3は、お客様のために舞台裏で簿記を行うため、他のAmazon S3オブジェクトと同じように、その大きなオブジェクトを取得できるようになりました。

より大きなオブジェクトを保存するには、先月ブログで紹介した新しい Multipart Upload API を使用して、オブジェクトを部分的にアップロードします。 [...]

11
Steffen Opel

標準のHTTPPostよりも強力なものを提供するフラッシュアップローダーはありませんが、サーバー上の調整ソフトウェアを使用して、クライアント用に独自のフラッシュソフトウェアを開発できます。

0
Texman