Python 使用Flask上载文件时,应如何处理重复的文件名
我最近遇到了关于Flask文件上传的问题和答案 在我再次上传同名图片之前,这一切都很顺利。它没有改变图像或覆盖它 我这里的问题是,如果用户上传了一个同名的图像,我们有没有办法显示一条错误消息,或者自动将名称更改为其他名称 对于自动更改名称,我进行了研究,可以通过resolve\u conflict来完成,但我不知道如何实现它 我的代码与参考代码相同 在保存文件之前,需要创建某种uniuqe ID以附加到文件名 这可以通过以下方法实现:Python 使用Flask上载文件时,应如何处理重复的文件名,python,flask,Python,Flask,我最近遇到了关于Flask文件上传的问题和答案 在我再次上传同名图片之前,这一切都很顺利。它没有改变图像或覆盖它 我这里的问题是,如果用户上传了一个同名的图像,我们有没有办法显示一条错误消息,或者自动将名称更改为其他名称 对于自动更改名称,我进行了研究,可以通过resolve\u conflict来完成,但我不知道如何实现它 我的代码与参考代码相同 在保存文件之前,需要创建某种uniuqe ID以附加到文件名 这可以通过以下方法实现: from uuid import uuid4 def mak
from uuid import uuid4
def make_unique(string):
ident = uuid4().__str__()[:8]
return f"{ident}-{string}"
可用于向字符串开头添加8个随机字符:
>>> make_unique('something.txt')
'aa659bb8-something.txt'
要在上载代码中使用此选项,只需在保存之前通过该函数运行文件名。请确保首先通过安全\u filename
功能输入文件名,不过:
if file and allowed_file(file.filename):
original_filename = secure_filename(file.filename)
unique_filename = make_unique(original_filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], unique_filename))
虽然这是为了避免重复,但在更大的应用程序中,您可能希望扩展这种方法 如果在数据库中存储
original_filename
和unique_filename
的值,则允许您在下载路径中执行以下操作:
from flask import send_file
# ...
f = os.path.join(app.config['UPLOAD_FOLDER'], unique_filename)
send_file(f, attachment_filename=original_filename)
这样做的好处是,文件以唯一标识符存储在服务器上,但用户永远不会知道这一点,因为文件将以最初上载的文件名返回给他们
实际上,您可能希望更进一步,只需使用完整的uuid字符串保存文件;将第三行更改为:
unique_filename = uuid4().__str__()
这仍将为文件提供正确的mimetype,因为
send\u file
根据提供的attachment\u文件名猜测mimetype。对于较长的答案,请遵循适当问题的规则。解决方案不需要只编写代码,但您的问题也必须包含一些内容。@HenryHarutyunyan抱歉,我是新来的,我不想重复它。这就是为什么我给了你一份推荐信。请帮助,如果我看到,但仍然需要显示一些工作完成。你如何使用它?提到其他问题是可以的,但是你需要展示你做了什么,你有什么问题。如果可能的话,请在这里发布上传图像的部分代码。一个选项是使用os.path.exists(os.path.join(app.config['UPLOAD\u FOLDER'],filename))
,但同样,idk是您需要放置它的地方,因为您没有任何实现细节。@HenryHarutyunyan我的代码作为参考也是一样的