在Django上传中创建带有正确权限的文件夹

2 投票
2 回答
2307 浏览
提问于 2025-04-16 21:28

在上传文件的时候,我把 upload_to 设置成一个函数,这个函数会创建一个不存在的路径,但Django却会自动创建一些额外的文件夹,而这些文件夹的权限我不太喜欢。

举个例子,

def photo_upload_path(instance, filename):  
    return os.path.join('photos', str(instance.id), filename)

不过,这些文件夹的权限并不是我想要的。我是不是应该自己先创建文件夹,然后设置权限呢?还是说有什么设置可以调整这个?

我找到了一篇关于控制上传文件权限的帖子(django / file uploads permissions),但没有找到关于创建目录的相关内容。

谢谢大家的帮助!

2 个回答

0

所以我最后找到了解决权限问题的方法。

我当时使用的是apache,所以我觉得这其实并不完全是django的问题。

如果我编辑一下 /etc/apache2/envvars 文件,并添加一行,比如 umask u=rwx,g=rwx,o=rwx,这样就可以设置默认的权限了。

4

你可以在设置文件中更改默认的目录权限。这项功能在Django 1.7之后就有了,具体的说明可以在Django的文档中找到。需要注意的是,这样做会影响到Django创建的所有目录,包括静态文件的目录,所以要小心使用。

FILE_UPLOAD_DIRECTORY_PERMISSIONS = 0o755

把示例代码改成你想要的权限。我在示例代码中没有使用你请求的权限(0o777),是为了防止有人在没看说明的情况下直接复制。

撰写回答