在提供文件Nginx Django的同时使用UUID缩短URL

时间:2018-07-04 12:17:44

标签: django nginx

使用Django2和nginx,用户可以上传文件(主要是pic,vids),而我想通过屏蔽完整的网址路径来提供这些文件。

这是我希望看到的示例结构,但我不想让用户知道此结构甚至图像文件名。

domain.com/media/user/pictures/Y/M/D/image1.jpg

我希望用户通过这样的url看到上面的图像,并且每个文件的随机UUID编号都会发生变化,并且该编号可以指向任何类型的文件。

domain.com/media/23kj23l9ak3

上载文件时,原始名称,分配的权限(公共,朋友,私人),文件路径和所生成的UUID存储在数据库中),但文件存储在文件系统或远程位置。

我以前从未接触过这一点,我想知道现代的实现方式,或者让我知道django / nginx的哪些技术/功能可以帮助我解决它。

1 个答案:

答案 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
相关问题