我认为使用UUID会让你的文件名那么久。这也可以帮助你: -
import os, random, string
length = 13
chars = string.ascii_letters + string.digits + '[email protected]#$%^&*()'
random.seed = (os.urandom(1024))
a = ''.join(random.choice(chars) for i in range(length))
注意: - 调整长度参数按你的愿望。
filename = '%s%s' % (Yourfilename,str(a))
更改models.py为:
fileName = CharField(max_length=10, blank=True,unique=True)
更改views.py为:
try:
filename = filename
storeFileName = models.objects.create(fileName=filename)
except Exception,e:
import os, random, string
length = 13
chars = string.ascii_letters + string.digits + '[email protected]#$%^&*()'
random.seed = (os.urandom(1024))
a = ''.join(random.choice(chars) for i in range(length))
filename = '%s%s' % (Yourfilename,str(a))
storeFileName = models.objects.create(fileName=filename)
,不能设置为unique=True
这fileField
可能是错误Django中,将工作如下:
显然,会发生什么是: 如果文件已经存在,新文件将被命名为< >,其中<>是使名称唯一所需的下划线的数量。所以,例如,当一个名为foo.png的文件被多次上传时,第二个文件将被命名为foo_.png,第三个文件将是foo __。png等等。 虽然这可能应该记录下来。我不确定这个重命名是在管理员代码还是在模型代码中发生的。
所以finnaly,你可能只有一个选项来单独保存文件名,并在上传文件之前检查。
谢谢但是当文件不存在时,我想保留原来的名称。如果使用相同的文件名同时处理访问权限,我应该怎么做......有可能使原子成为现有文件的测试吗? – Bob5421
然后您应该添加模型fileField作为唯一的字段。并在脚本中尝试存储文件,如果数据库如果有重复,你可以写入异常和更改文件名,然后存储。 –
检查我的最后编辑@ Bob5421 –