我注意到 django-storages(或者可能是 Django 的存储 API 本身)会覆盖同名的文件。这对我来说是个问题,因为我的网站允许用户上传,所以我需要确保文件永远不会被覆盖。
理想情况下,我希望能够从视图级别将文件名传递给存储后端,但我正在努力寻找一种优雅的方式来做到这一点。如果在某个地方有一个开关,我可以做类似的事情overwrite=False
并让后端提出自己的替代名称,我会同样高兴。
我注意到 django-storages(或者可能是 Django 的存储 API 本身)会覆盖同名的文件。这对我来说是个问题,因为我的网站允许用户上传,所以我需要确保文件永远不会被覆盖。
理想情况下,我希望能够从视图级别将文件名传递给存储后端,但我正在努力寻找一种优雅的方式来做到这一点。如果在某个地方有一个开关,我可以做类似的事情overwrite=False
并让后端提出自己的替代名称,我会同样高兴。
如果您在 django-storages 中使用的是 s3boto 后端而不是旧的 s3 后端,那么您可以使用以下AWS_S3_FILE_OVERWRITE
设置进行更改:https ://bitbucket.org/david/django-storages/src/83fa2f0ba20c/storages/backends/s3boto.py #cl-43
@Mark Lavin 的回答恰当地指出了AWS_S3_FILE_OVERWRITE
避免False
这个问题的设置。
您可能还想稍微改进一下文件名间距。您可以在 S3 上以您想要的任何名称保存文件(它不必是用户上传的文件的名称)。因此,您可以使用名称“user_uploads/[user_id]/[user_generated_file_name]”保存文件。作为下载的一部分,您还可以将文件名设置为您想要的任何名称。如果您将用户上传的文件名保存为模型上的字段,则可以将其指定为下载文件的视图中的文件名。