为什么上传的图片权限取决于它的大小?

时间:2016-07-30 11:49:13

标签: python django nginx centos gunicorn

使用Django Framework构建Web应用程序

  • 服务器:CentOS Linux release 7.1.1503 (Core)
  • Nginx:nginx version: nginx/1.6.3
  • Gunicorn:gunicorn==19.3.0
  • Django:Django==1.8.4

上传小于2.7M的图片时,一切正常。

  1. 在服务器上创建图像(MEDIA_ROOT
  2. 用户组和读取权限:-rw-r--r-- 1 tb360 tb360
  3. 图像由Web服务器提供,没有问题
  4. 但是当图片大小超过2.7M

    1. 在服务器上创建图像(MEDIA_ROOT
    2. 图片未经读取权限:-rw------- 1 tb360 tb360
    3. Web服务器不提供图像 原因:没有文件读取权限
    4. 在我刚刚为此类图像添加读取权限后,它将由Web服务器提供,而不会出现问题。

      在本地开发机器上进行测试时,没有类似的问题。

      nginx configuration

1 个答案:

答案 0 :(得分:2)

Django正在使用2个上传处理程序:MemoryFileUploadHandlerTemporaryFileUploadHandler。第一个将在ram中保留上传的文件,然后再决定如何处理它。第二个将文件放在临时目录中,稍后将其移动到正确的位置。

可能会出现问题,因为内存处理程序只会占用一定大小的文件,并且您的系统对临时目录具有不同的默认文件权限。将文件从临时文件移动到MEDIA_ROOT时,将保留这些权限。

您可以通过设置FILE_UPLOAD_PERMISSIONS(因此文件将始终具有适当的权限)或FILE_UPLOAD_TEMP_DIR(将临时文件存储在不同的位置,而不设置更严格的文件权限)来解决该问题。