使用Django2和nginx,用户可以上传文件(主要是pic,vids),而我想通过屏蔽完整的网址路径来提供这些文件。
这是我希望看到的示例结构,但我不想让用户知道此结构甚至图像文件名。
domain.com/media/user/pictures/Y/M/D/image1.jpg
我希望用户通过这样的url看到上面的图像,并且每个文件的随机UUID编号都会发生变化,并且该编号可以指向任何类型的文件。
domain.com/media/23kj23l9ak3
上载文件时,原始名称,分配的权限(公共,朋友,私人),文件路径和所生成的UUID存储在数据库中),但文件存储在文件系统或远程位置。
我以前从未接触过这一点,我想知道现代的实现方式,或者让我知道django / nginx的哪些技术/功能可以帮助我解决它。
答案 0 :(得分:0)
我不确定您为什么要这么做,而不是简单地将UUID用作上传文件的文件名,但是您当然可以做到。
一种好方法是通过Django路由请求,并使用自定义的X-Accel-Redirect标头告诉nginx使用特定文件进行响应。您需要将UID和实际路径存储在Django模型中。因此,nginx的配置将类似于:
location /protected/ {
internal;
alias /media/user/; # note the trailing slash
}
和Django视图将是:
def user_picture(request, uuid):
image = MyModel.objects.get(uuid=uuid)
response = HttpResponse(status=200)
response['X-Accel-Redirect'] = '/protected/' + image.file.path
return response