保存FileField文件上传MEDIA_ROOT以外的其他位置?

时间:2009-11-15 01:46:01

标签: django

我可以使用FileField处理文件,但是将其存储在MEDIA_ROOT/MEDIA_URL而不是的地方,但完全存放在其他地方。

寻求确保无法下载;虽然拒绝阅读权限会在这里诀窍,希望能有更好的东西......就像完全不同的目录一样。

2 个答案:

答案 0 :(得分:12)

有几种方法可以做到这一点。

首先,您可以查看Django文档中的handling uploaded files。如果你仔细阅读,基本上你可以在你处理表格的同一部分处理视图中的文件上传。

另一种选择,我认为更好的选择是使用custom file storage system。您可以非常简单地使用现有的作为基础,但只需更改位置,然后将其用作FileField中的参数。例如:

from django.core.files.storage import FileSystemStorage

my_store = FileSystemStorage(location='/some/other/dir')

class SomeModel(models.Model):
      file = models.FileField(storage=my_store)

希望有所帮助!

答案 1 :(得分:2)

考虑到在所有Django中唯一实际使用的MEDIA_ROOT是确定上传文件的存储位置,看起来只需将MEDIA_ROOT指向您想要上传文件的位置就更合理了,然后使用不同的设置静态资产的路径。这是Pinaxdjango-staticfiles采用的方法,它使用STATIC_URL和STATIC_ROOT设置。

请注意,即使the documentation page on serving static assets in development不再建议将MEDIA_ROOT用于此目的,也会使用您自己的STATIC_DOC_ROOT设置进行演示。