-1

当注册用户将一些文件以 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 文件

4

3 回答 3

1

您要么需要维护该用户使用的最后一个索引的数据存储,要么在文件系统中搜索该用户的现有文件并找到第一个未使用(或最后使用)的索引,然后使用该索引创建新文件。

于 2012-04-05T14:54:25.790 回答
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)
于 2012-04-05T15:04:43.000 回答
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

于 2012-04-05T15:03:35.753 回答