2

録音された音楽製品をメタデータと wav ファイルでカタログ化する Rails アプリがあります。

以前は、ユーザーは ftp 経由でファイルを送信するオプションがありました。これは、新しい .complete ファイルの cron タスクで監視し、関連付けられている .xml ファイルを選択して、メタデータのインポートと S3 へのオーディオ ファイルの転送を実行します。

私は定期的に以前の FTP の容量制限に達したので、ユーザーがファイルを送信できるように FTP ゲートウェイを使用して、ユーザー「ドロップボックス」を S3 に移動することにしました。現在は S3 上にあり、S3 がオブジェクトをフォルダーに保存していないため、バケットをナビゲートし、.complete ファイルを見つけて、通常どおりインポートを実行する方法を理解するのに苦労しています。

とにかく、新しい.completeファイルのバケットを「スキャン」する方法をお勧めできますか...ファイル名を読み取ってからアプリに戻して、xml、wav、およびjpgファイルを取得できるようにしますか?

私のバケット内のファイルの構造はこのようなものです。ご覧のとおり、ここには 2 つの製品があります。関連するxmlデータとwavs/jpgの両方を見つけてインポートする必要があります

42093156-5060156655634/
42093156-5060156655634/5060156655634.complete
42093156-5060156655634/5060156655634.jpg
42093156-5060156655634/5060156655634.xml
42093156-5060156655634/5060156655634_1_01_wav.wav
42093156-5060156655634/5060156655634_1_02_wav.wav
42093156-5060156655634/5060156655634_1_03_wav.wav
42093156-5060156655634/5060156655634_1_04_wav.wav
42093156-5060156655634/5060156655634_1_05_wav.wav
42093156-5060156655634/5060156655634_1_06_wav.wav
42093156-5060156655634/5060156655634_1_07_wav.wav
42093156-5060156655634/5060156655634_1_08_wav.wav
42093156-5060156655634/5060156655634_1_09_wav.wav
42093156-5060156655634/5060156655634_1_10_wav.wav
42093156-5060156655634/5060156655634_1_11_wav.wav
42093163-5060243322593/
42093163-5060243322593/5060243322593.complete
42093163-5060243322593/5060243322593.jpg
42093163-5060243322593/5060243322593.xml
42093163-5060243322593/5060243322593_1_01_wav.wav
4

1 に答える 1

2

Amazon S3 には正式にはフォルダーの概念がありませんが、パラメーターとを使用して、 GET Bucket APIを介して実際にフォルダーをシミュレートできます。AWS マネジメント コンソール インターフェイスに表示されるものと同様の結果が得られます。delimiterprefix

これを使用して、最上位のディレクトリを一覧表示し、それらをスキャンできます。最上位のディレクトリの名前を見つけたら、パラメータを変更して新しい GET Bucket リクエストを発行し、「ディレクトリ」内の「ファイル」を一覧表示して、.completeファイルの存在を確認するだけでなく、.xml他のディレクトリも確認できます。関連ファイル。

ただし、問題には別のアプローチがあるかもしれません: SQSの使用を検討しましたか? アップロードを受信するプロセスが、完了したばかりのアップロードのフォルダーの名前を使用して、SQS のキューにメッセージを投稿するようにすることができます。たとえば、completed-uploadsです。その後、別のプロセスがキューを消費し、完了したアップロードを処理します。S3 のディレクトリをスキャンする必要はありません。

SQS アプローチを試す場合は、アップロードの完了を複数回通知される可能性に備える必要があるかもしれないことに注意してください。SQS は、投稿されたメッセージを最終的に少なくとも 1 回配信することを保証します。重複したメッセージを受信する可能性があります! (たとえば、一貫したデータベースに受信メッセージの ID を保存し、同じデータベースに対して新しく受信したメッセージをチェックすることで、重複したメッセージを識別できます)。

また、S3 に米国標準リージョンを使用する場合、書き込み後の読み取りの一貫性はなく、最終的な一貫性しかないことに注意してください。つまり、SQS からメッセージを受信するプロセスがオブジェクトを取得しようとする可能性があります。 S3 から何も返されず、オブジェクトが表示されるまで再試行してください。

于 2013-06-29T21:32:26.480 に答える