Djangoには、ログインしたユーザーのみのメディアファイル(ユーザーアップロードファイルなど)を配信したいと考えています。私のサイトはかなりトラフィックが少ないので、私は物事を単純に保ち、Nginxにファイルを提供するときにはdjango-sendfile
を使わないでください。代わりに私はDjango/Gunicornに仕事をさせます。私にとっては、これはずっと簡単で、トラフィックの少ないサイトではこれはもっと安全です。保護されたメディアファイルをdjangoで配信する
しかし、ファイルの格納場所を整理する最良の方法は何ですか?メディアファイルはすべてMEDIA_ROOT
以下に格納され、このディレクトリはNginxが運用しています。ファイルをMEDIA_ROOT/protected/
にアップロードすると、Nginxにサブディレクトリprotected
のファイルを提供しないように指示する必要があります。
これは良い考えですか? Nginxのアクセス先で最初に/media/
にアクセスしてから、サブディレクトリ/media/protected/
を保護するのは危険です。保護されたファイルを格納するためにサブディレクトリMEDIA_ROOT
を使用しない方が良いのではないでしょうか?
しかし、私は私のモデルでは、この間に合わせと-ような何かしようとした場合:
upload_to='../protected/documents/%Y/%m/'
をDjangoは文句:
SuspiciousFileOperation at /admin/core/document/add/
The joined path (/home/me/projects/project/protected/documents/2016/09/test.file) is located outside of the base path component (/home/me/projects/project/media)
だから私の事は、「去る」ことをお勧めではありませんMEDIA_ROOT
。
保護されたメディアファイルを保存して配信する最適なソリューションは何ですか?
私はどんな公共のメディアを持っていないことを除いて、私は好きではないであろうと、同じ問題への解決策を探していますへのあなたの視野ファイルを提供するためにDjangoを悪用します。しかし、現時点ではただ一つの発言。ファイルレスポンスを使用する前にファイルを開くべきではありませんか? https://docs.djangoproject.com/en/1.10/ref/request-response/#fileresponse-objects – texnic
@texnic私の答えをチェックする –