使用验证可防止上载重复文件_name_

时间:2014-12-01 11:45:47

标签: django django-forms

如何检测到用户提供上传的文件的名称(通过使用django.forms.ModelForm字段的FileField)与存在,因此决定在表单上验证失败?

我发现这一点特别具有挑战性,因为从表单中我不知道如何找出upload_toFileField的价值是什么,所以我不能在文件系统中查看自己是否已存在该文件。

2 个答案:

答案 0 :(得分:1)

我认为你有两个选择:

settings.py中设置一个值,以保存您的'upload_to'然后用它来检查你的验证时间。 这样的验证会起作用(你需要改变你的upload_to ofc):

from django.conf import settings

if settings.UPLOAD_TO:
    # Do something

问题在于你不能拥有子文件夹或任何复杂的文件。

如您的评论中所述,第二个选项是在模型中添加一个新列,其中包含文件的哈希值。这种方法应该更好。正如您在评论中提到的那样,为了避免上传大文件,检查,失败,上传其他大文件等,您可以尝试在客户端中对其进行哈希并首先通过ajax进行验证(您将在服务器中再次验证它,但这可以让你的用户更快地完成任务。)

答案 1 :(得分:1)

较早的问题,但Django 1.11现在支持FileField上的unique选项。在模型的字段声明中设置unique=True

将upload_to设置为什么并不重要。文件名仍将存储在数据库中。

  

在Django 1.11中更改:   在旧版本中,不能在FileField上使用unique = True。

https://docs.djangoproject.com/en/1.11/ref/models/fields/#unique