DjangoアプリケーションとS3で非常に大きなファイルのアップロード機能をどのように実装しますか?
写真家としての副業で、問題のあるイベントの元の画像と処理された画像を含むマルチギガバイトのアーカイブ(zip、tar)ファイルを共有する必要があるクライアントがいくつかいます。これまでは、これにGoogleドライブを使用してきました。GDにファイルをアップロードし、ローカルストレージドライブにファイルを取得して保存していました。アップロードされたファイルはMacのGoogleドライブクライアントを介してコンピューターにミラーリングされるため、GDフォルダーを時々クリーンアップします。私のMacには256GBのオンボードドライブしかないので、スペースは非常に貴重です。
1つのクライアントで、過去4か月間に2つのハードドライブ障害が発生しました。過去10年間、私が彼らに雇われていたのはゼロでした。彼らはより良いソリューションを望んでおり、私はすでに開発者です。
ここでの問題は、ブラウザに12ギガバイトを超えるアーカイブファイルのキューイングとサーバーへの転送を任せることをお勧めします。このファイルは、S3に移動する前に属性のスキャンを行います。
これには2つのオプションがあります。
- ブラウザでファイルアップロードフォームを使用して、マルチパートファイルをサーバーにアップロードします。完了すると、ファイルはローカルのCeleryタスクによってチェックおよび処理され、S3バケットにアップロードされます。
- ローカルファイル処理のCeleryタスクの実行をトリガーするDjango管理コマンドを実装し、Paramikoを使用してローカルPythonスクリプトを使用してファイルをアップロードし、アップロードが完了したときに管理コマンドの実行をトリガーします。
個人的には、私はオプション2に傾いていますが、可能であれば他のアイデアを求めています。
3
私はDjangoとCeleryの詳細に精通していませんが、どのようなソリューションを選択する場合でも、おそらく中断して後で部分的に成功したアップロードを継続できるように、堅牢にする必要があります。マルチパートアーカイブを利用することは、各パートのチェックサムと一緒に、このための良いアイデアかもしれません。
—
Doc Brown、
しかし、私はrsyncを再発明する誘惑に抵抗しようとします。それはあなたの仕事のためのツールのようです。
—
5gon12eder 2017