Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 上载文件的名称_Python_Django - Fatal编程技术网

Python 上载文件的名称

Python 上载文件的名称,python,django,Python,Django,注册用户将一些文件以PDF格式上载到MEDIA_ROOT(命名为usermedia目录) 文档以123456542.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)

注册用户将一些文件以PDF格式上载到MEDIA_ROOT(命名为usermedia目录) 文档以123456542.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()
但是,当用户想要上载另一个文档时,此文档将另存为上一个文档


如何设置用户何时希望将另一个文件上载到名为123456742-1.pdf的geth文件。您需要维护该用户上次使用的索引的数据存储,或者在文件系统中搜索该用户的现有文件,并查找第一个未使用(或上次使用)的索引,然后用它创建新文件。

下面是一个解决方案示例请记住,我还没有对此进行测试,因此可能存在语法错误。将此视为建议。

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
def句柄上传文件(f,wusr):
nname=“%s.%s”%(str(wusr.oib),f.name.split(“.”[1])
nname=unique(nname)
目标=打开(“%s/%s%”(媒体根目录,nname),“wb+”)
对于f.chunks()中的chunk:
destination.write(块)
destination.close()
#返回格式为-的唯一文件名。
def唯一(路径):
导入操作系统路径
num=0
新路径=路径
def文件存在(路径):
返回os.path.isfile(路径)
#保持递增,直到达到唯一的文件名
文件存在时(新路径):
num+=1
片段=路径.rsplit('.',1)
newpath=“%s-%d.%s”%(条数[0],个数,条数[1])
返回新路径

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)

但是我不知道如何将它集成到我的应用程序中,是否缺少一些东西?上面的示例只是您问题中代码的编辑。您应该能够将示例集成到问题中复制代码的位置。这只是一个名为
unique
的附加函数,在使用它之前,您需要在文件名上运行它,我真的无法再清楚地了解它了