1

当面の問題

  1. 私はレールアプリを持っています。
  2. ユーザーはファイルをアップロードします。1 ファイルから 3000 ファイルの間の任意の場所。zip ファイルの場合もあれば、そうでない場合もあります。これらのファイルのアップロードでサーバーを停止させたくないので、この問題の解決策を探しています。
  3. 圧縮されたファイルは解凍する必要があります。
  4. 次に、ユーザーが以前に同じファイルをアップロードしたことがあるかどうかを確認します。つまり、ユーザーが 1 週間前に同じファイル (2) を既にアップロードしている場合、これは問題です: (i) その特定のファイルのアップロードを許可しないか、ユーザーに尋ねます:同じファイルをもう一度アップロードするには?
  5. 次に、バックエンドの適切なモデル/レコード内のファイルへのキー/リンクを保存します。

上記を処理するための最良のワークフローは何か、つまり非常に一般的な概要を考えていました。つまり、AWS Lambda / Google クラウド コンピューティングなどを使用して上記の問題を処理するのが最適でしょうか? この状況に対処するには、Shrine gem をどのように使用すればよいでしょうか? バックグラウンド ジョブを使用するのではなく、AWS Lambda を使用することは理にかなっていますか?

私の好みは、Shrine gem をアップロードに使用することです。

私のアイデア:

  1. クライアント側では、ユーザーはアップロードしたいファイルをドラッグ アンド ドロップします。
  2. すべてのファイルは、Shrine gem を介して一時的なバケットの場所に (圧縮されているかどうかに関係なく) アップロードされます。
  3. zip ファイルがアップロードされている場合は、おそらく AWS ラムダ関数をトリガーしてファイルを解凍する必要があります。その場合、結局のところ、検証の問題を処理するために、これらのファイルのキーを何らかの形でクライアントに返す必要がありますが、AWS ラムダ関数はどのようにしてこのリクエストを元のクライアント側に返すことができるのでしょうかリクエストの発信元はどこですか?むしろ、解凍された BLOB の ID を渡して、クライアント側から AWS ラムダ関数を生成する必要がありますか?
  4. 次に、いくつかの検証を実行する必要があります。ファイルが重複している状況を処理する必要があります。これらのファイルが既にアップロードされているかどうかについては、レールを使用して確認する必要があります。
  5. これらの検証の問題が処理された後、ユーザーがフォームを送信すると、すべてのキーが適切なレコードに保存されます。

これらのアイデアは決して規範的なものではありません

これをすべて行う最善の方法について、非常に一般的なアドバイスを求めています。私は決して AWS に縛られているわけではありません。Google や Azure も同様に簡単に使用できます。上記に関するガイダンスをいただければ幸いです。

具体的な質問:

  1. AWS ラムダ関数はどのようにトリガーされますか?
  2. アップロードされたファイルのキーをクライアントに戻すにはどうすればよいでしょうか?

一般的な概要とはどういう意味ですか?

一般的な概要の例を次に示します。

(1) Heroku でホストされている Rails を介して S3 にファイルをアップロードおよび解凍しますか?

(2) https://www.quora.com/How-do-I-extract-large-zip-files-in-AWS-Lambda

正しい方向へのポインタは大歓迎です。

乾杯!

4

1 に答える 1