上载文件的名称

2024-09-30 14:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

注册用户将一些文件以PDF格式上载到媒体目录(名为usermedia directory) 文档保存在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文件


Tags: 文件用户文档目录pdf格式destinationdirectory
3条回答

下面是一个解决方案的示例。记住我还没有测试过这个,所以可能会有语法错误。将此视为建议。

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

您的代码需要检查现有文件,直到找到适当的未使用文件名。像这样:

import os

filename = base_filename = '123456765432'
ext = '.pdf'
suffix = 0
while os.path.exists(filename+ext):
    suffix += 1
    filename = '%s-%d' % (base_filename, suffix)

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

相关问题 更多 >