为什么上传的图片权限取决于它的大小?
Why does uploaded image permissions depends on it's size?
使用 Django 框架构建 Web 应用程序
- 服务器:
CentOS Linux release 7.1.1503 (Core)
- Nginx:
nginx version: nginx/1.6.3
- 独角兽:
gunicorn==19.3.0
- Django:
Django==1.8.4
上传小于 2.7M
的图片时一切正常。
- 图像在服务器上创建它应该在的位置 (
MEDIA_ROOT
)
- 用户组和读取权限:
-rw-r--r-- 1 tb360 tb360
- 图像由 Web 服务器提供,没有问题
但是当图像尺寸超过2.7M
- 图像在服务器上创建它应该在的位置 (
MEDIA_ROOT
)
- 图片没有读取权限:
-rw------- 1 tb360 tb360
- 网络服务器不提供图片
原因:文件没有读取权限
在我对此类图片添加读取权限后,它可以毫无问题地由网络服务器提供。
在本地开发机器上测试时没有类似问题。
Django 使用 2 个上传处理程序:MemoryFileUploadHandler
和 TemporaryFileUploadHandler
。第一个将在决定如何处理之前将上传的文件保存在 ram 中。第二个将文件放在临时目录中,稍后将其移动到适当的位置。
可能会出现问题,因为内存处理程序将只接收特定大小的文件,并且您的系统对临时目录具有不同的默认文件权限。将文件从临时文件移动到您的 MEDIA_ROOT
.
时将保留该权限
您可以通过设置 FILE_UPLOAD_PERMISSIONS
(so files will always have proper permissions) or FILE_UPLOAD_TEMP_DIR
来解决该问题(将临时文件存储在不同的位置,这不会设置更严格的文件权限)。
使用 Django 框架构建 Web 应用程序
- 服务器:
CentOS Linux release 7.1.1503 (Core)
- Nginx:
nginx version: nginx/1.6.3
- 独角兽:
gunicorn==19.3.0
- Django:
Django==1.8.4
上传小于 2.7M
的图片时一切正常。
- 图像在服务器上创建它应该在的位置 (
MEDIA_ROOT
) - 用户组和读取权限:
-rw-r--r-- 1 tb360 tb360
- 图像由 Web 服务器提供,没有问题
但是当图像尺寸超过2.7M
- 图像在服务器上创建它应该在的位置 (
MEDIA_ROOT
) - 图片没有读取权限:
-rw------- 1 tb360 tb360
- 网络服务器不提供图片 原因:文件没有读取权限
在我对此类图片添加读取权限后,它可以毫无问题地由网络服务器提供。
在本地开发机器上测试时没有类似问题。
Django 使用 2 个上传处理程序:MemoryFileUploadHandler
和 TemporaryFileUploadHandler
。第一个将在决定如何处理之前将上传的文件保存在 ram 中。第二个将文件放在临时目录中,稍后将其移动到适当的位置。
可能会出现问题,因为内存处理程序将只接收特定大小的文件,并且您的系统对临时目录具有不同的默认文件权限。将文件从临时文件移动到您的 MEDIA_ROOT
.
您可以通过设置 FILE_UPLOAD_PERMISSIONS
(so files will always have proper permissions) or FILE_UPLOAD_TEMP_DIR
来解决该问题(将临时文件存储在不同的位置,这不会设置更严格的文件权限)。