django-storages を使用してメディア ファイルを S3 バケットに保存しています。ただし、ファイルを変換したり、新しいファイルを作成するためにファイルをいじったりすることがあります。このいじりは、サーバー上の実際のファイルを使用する必要があります (ほとんどの変換はプロセス呼び出しを使用して行われます)。完了したら、ファイルを S3 に保存したいと思います。
理想的な世界では、ローカルから S3 に移行するときに関数を変更する必要はありません。ただし、これらの中間ローカル ファイルを作成していじる必要があることを考えると、これをどのように行うかはわかりません。最終的には、結果のファイル (ローカル マシンにも保存される) を作成する必要があることがわかります。 S3にコピーしました。
1 つはソース ファイル用、もう 1 つは宛先ファイル用の 1 組のコンテキスト ガードを使用して思いつくことができる最善の方法です。ソースファイルは、コピーされたソースファイルの内容を取得する一時ファイルを作成し、それを使用、操作などします。宛先ファイルのコンテキストガードは、S3 で最終的な目的の宛先パスを取得し、一時ローカル ファイルを作成し、終了時に S3 バケットにキーを作成し、一時ファイルの内容をコピーして削除します。
しかし、これは私にはかなり複雑に思えます。また、これらのファイルを操作するすべての関数を 2 つの "with" 句でラップする必要があります。
私が考えることができる他の唯一の解決策は、ファイル名ではなくファイルのようなオブジェクトのみを処理するユーティリティに切り替えることですが、これはサブプロセス呼び出しを実行できないことを意味します。