Wil*_*ers 5 python turbogears2
我一直试图用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()
Run Code Online (Sandbox Code Playgroud)
所以假设我理解正确,这样的事情会避免核心'命名'问题吗?id = UUID.
file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,
id.lstrip(os.sep)), 'w')
shutil.copyfileobj(file.file, permanent_file)
file.file.close()
this_file = file.filename
permanent_file.close()
Run Code Online (Sandbox Code Playgroud)
@mhawke - 你是对的,你必须处理这个问题 - 取决于你对文件所做的事情,如果名称冲突并不重要,例如你只关心某些数据的最新版本,那么可能没有问题,或者如果文件名实际上并不重要,只是文件内容,但它仍然是不好的做法。
您可以在 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)
Run Code Online (Sandbox Code Playgroud)
slugify 方法将用于整理文件名......