我正在尝试使用 Flask 在 python 中构建一个网站,该网站接受文件上传并将它们保存到一个文件夹(称为 uploads)。但是,当上传两个同名文件时,第一个文件会被最后一个文件覆盖。我怎样才能以一种不丢失任何文件的方式防止这种情况发生?在文件名中添加时间戳会有帮助吗?或者如果同时上传两个文件还会有问题吗?
谢谢!
文件系统
FlaskProject:
├───static
├───templates
├───uploads
└───app.py
HTML
{%extends "base.html" %}
{%block content%}
<p>
<h2>Upload Below!</h2>
<div></div>
<form action = "http://localhost:5000/upload_complete" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit"/>
</form>
{% endblock %}
Python
from flask import Flask, redirect, url_for, render_template, request
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = "D:/Me/FlaskProject/uploads"
@app.route('/upload')
def upload():
return render_template("upload.html", page="Upload Images")
@app.route('/upload_complete', methods = ['GET', 'POST'])
def upload_complete():
if request.method == 'POST':
f = request.files['file']
f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))
return redirect(url_for('upload_complete'))
return render_template("upload_complete.html", page="Upload Complete")
if __name__ == '__main__':
app.debug = True
app.run()
app.run(debug = True)
(upload_complete.html 只是一个感谢屏幕)
您可以生成一个
uuid
并用它更新文件名。
你可以像这样生成
uuid
,
import uuid
... your code ..
hash_value = uuid.uuid4().hex
f.save(os.path.join(app.config['UPLOAD_FOLDER'], hash_value + secure_filename(f.filename)))
在代码中添加时间戳,以便它根据时间戳生成输出。因此,不会发生覆盖的情况