我一直试图用Turbogears 2来制定管理文件上传的“最佳实践”方法,到目前为止还没有真正找到任何例子.我已经找到了实际上传文件的方法,但我不确定它有多可靠.
file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,file.filename.lstrip(os.sep)),'w')
shutil.copyfileobj(file.file,permanent_file)
file.file.close()
this_file = self.request.params["file"].filename
permanent_file.close()
所以假设我理解正确,这样的事情会避免核心’命名’问题吗? id = UUID.
file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,id.lstrip(os.sep)),permanent_file)
file.file.close()
this_file = file.filename
permanent_file.close()
最佳答案
@mhawke – 你是对的,你必须处理 – 取决于你正在对文件做什么,如果有一个名称冲突没关系,例如你只关心一些数据的最新版本然后可能没有问题,或者如果文件名实际上不重要只是文件内容,但它仍然是不好的做法.
原文链接:https://www.f2er.com/python/439014.html您可以在tmp目录中使用命名的临时文件,然后将文件一经验证移动到其最终位置.或者您可以检查文件名是否已经存在,如下所示:
file.name = slugify(myfile.filename)
name,ext = os.path.splitext(file.name)
while os.path.exists(os.path.join(permanent_store,file.name)):
name += '_'
file.name = name + ext
raw_file = os.path.join(permanent_store,file.name)