【问题标题】:Why does uploaded image permissions depends on it's size?为什么上传的图片权限取决于它的大小?
【发布时间】:2016-12-05 01:03:24
【问题描述】:

使用 Django 框架构建 Web 应用程序

  • 服务器:CentOS Linux release 7.1.1503 (Core)
  • Nginx:nginx version: nginx/1.6.3
  • 独角兽:gunicorn==19.3.0
  • 姜戈:Django==1.8.4

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

  1. 图像是在它应该在的服务器上创建的 (MEDIA_ROOT)
  2. 用户组和读取权限:-rw-r--r-- 1 tb360 tb360
  3. 图片由网络服务器提供,没有问题

但是当图片大小超过2.7M

  1. 图像是在它应该在的服务器上创建的 (MEDIA_ROOT)
  2. 图片没有读取权限:-rw------- 1 tb360 tb360
  3. Web 服务器不提供图像 原因:文件没有读取权限

在我只为此类图像添加读取权限后,它由网络服务器提供,没有问题。

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

nginx configuration

【问题讨论】:

    标签: python django nginx centos gunicorn


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢清晰的解释!在我的情况下,我增加了 FILE_UPLOAD_MAX_MEMORY_SIZE 值。
    • 非常感谢。到目前为止,我已经注意到不同的权限取决于文件大小,但您的调查为我节省了很多时间。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-11-03
    • 2011-09-20
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多