Python Django在本地主机上保存文件

Python Django在本地主机上保存文件,python,django,django-models,Python,Django,Django Models,我正在开发Django应用程序(DRF),但我是一名JS工程师,所以这对我来说是全新的 在我的models.py中,在任何实际模型之外,我都有: storage = S3Storage(aws_s3_bucket_name=settings.DOCUMENTS_BUCKET) upload_location = 'recordings/' 这是一个用于其中一个模型的字段: zip_file = models.FileField( upload_to=upload_location, s

我正在开发Django应用程序(DRF),但我是一名JS工程师,所以这对我来说是全新的

在我的models.py中,在任何实际模型之外,我都有:

storage = S3Storage(aws_s3_bucket_name=settings.DOCUMENTS_BUCKET)
upload_location = 'recordings/'
这是一个用于其中一个模型的字段:

zip_file = models.FileField(
    upload_to=upload_location, storage=storage, null=True)
这在生产中正常工作。但是,我希望能够在本地进行测试,在本地开发时添加这些zip文件。因此,我为
存储
上传位置
添加了以下内容:

if settings.DEBUG:
  storage = FileSystemStorage(location='/')
  upload_location = ''
然后,当我尝试从localhost上的admin保存文件时,出现以下错误:

[Errno 13] Permission denied: '/my-file.zip'

如果我做对了,应用程序就不能在我的文件系统的某个地方创建那个位置。也许我错了。我该如何解决这个问题呢?

我建议您看看。
使用用于本地主机的文件系统和用于生产的S3,您可以轻松地在模型上保存文件。

所有配置都将处于设置状态,因此您无需再放置IFs。

我建议您查看。
使用用于本地主机的文件系统和用于生产的S3,您可以轻松地在模型上保存文件。

所有配置都将处于设置状态,因此您不再需要放置IFs。

传递到
文件字段的位置相对于
媒体根目录
,除非它以斜杠开头。如果它以斜线开头,则这是一条绝对路径,与驱动器的根相对

因此,
location='/'
表示硬盘的根目录(因此存在权限问题)


您可以使用
/
使用
媒体根目录
,但通常最好根据一些标准对资产进行分组。例如,对于名为
SomeModel
的模型,将资产放置在类似
location='some-models/'
的位置,传递到
FileField
中的位置相对于
媒体根
,除非它以斜杠开头。如果它以斜线开头,则这是一条绝对路径,与驱动器的根相对

因此,
location='/'
表示硬盘的根目录(因此存在权限问题)


您可以使用
/
使用
媒体根目录
,但通常最好根据一些标准对资产进行分组。例如,对于名为
SomeModel
的模型,将资产放置在类似
location='some-models/'

的位置。是否检查了文件夹权限?如果没有,请设置文件夹权限以允许创建文件…因为这是文件系统存储,
/
直接引用文件系统的根目录。你确定那是你要存放东西的地方吗?当然
MEDIA\u ROOT
会是一个更好的地方。看看这个问题的答案:@DanielRoseman出于某种原因,我认为
/
指的是当前正在运行的项目的根,我已经更改了这些权限。现在修改了路径,很好。谢谢!你检查文件夹权限了吗?如果没有,请设置文件夹权限以允许创建文件…因为这是文件系统存储,
/
直接引用文件系统的根目录。你确定那是你要存放东西的地方吗?当然
MEDIA\u ROOT
会是一个更好的地方。看看这个问题的答案:@DanielRoseman出于某种原因,我认为
/
指的是当前正在运行的项目的根,我已经更改了这些权限。现在修改了路径,很好。谢谢!