当注册用户将一些文件作为PDF上传到MEDIA_ROOT(名为usermedia目录)时 文档以12345676542.pdf保存在目录中 此号码是注册时提供的用户OIB号码
def handle_uploaded_file(f,wusr):
nname = "%s.%s" % (str(wusr.oib), f.name.split(".")[1])
print nname
destination = open('%s/%s' % (MEDIA_ROOT, nname), 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
但是当用户想要上传另一个文档时,该文档将保存为以前的文档
如何设置用户何时想要将另一个文件上传到名为12345676542-1.pdf的geth文件
答案 0 :(得分:1)
您需要维护该用户使用的最后一个索引的数据存储,或者在文件系统中搜索该用户的现有文件并找到第一个未使用(或最后使用过的)索引,然后创建新文件这一点。
答案 1 :(得分:0)
以下是解决方案的示例。 请记住,我没有对此进行测试,因此可能存在语法错误。将此视为建议。
def handle_uploaded_file(f,wusr):
nname = "%s.%s" % (str(wusr.oib), f.name.split(".")[1])
nname = unique(nname)
destination = open('%s/%s' % (MEDIA_ROOT, nname), 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
# Return unique file name in format <filename>-<num>.<ext>
def unique(path):
import os.path
num = 0
newpath = path
def fileExists(path):
return os.path.isfile(path)
# Keep incrementing until an unique filename is reached
while fileExists(newpath):
num += 1
pieces = path.rsplit('.', 1)
newpath = "%s-%d.%s" % (pieces[0], num, pieces[1])
return newpath
unique
函数会生成一个保证唯一的新文件名。当您达到大量同名的上传时,这种特定的检查磁盘每个间隔的解决方案可能会有问题。如果此解决方案的速度证明是一个问题,只需列出目录中的所有文件,然后对该字符串执行上述操作。这将减少从 x 到1
答案 2 :(得分:0)
您的代码需要检查现有文件,直到找到合适的未使用文件名。像这样:
import os
filename = base_filename = '123456765432'
ext = '.pdf'
suffix = 0
while os.path.exists(filename+ext):
suffix += 1
filename = '%s-%d' % (base_filename, suffix)