上传文件的名称

时间:2012-04-05 14:37:00

标签: python django

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

3 个答案:

答案 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)