Flask Python如何防止上传的文件同名

问题描述 投票:0回答:2

我正在尝试使用 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 只是一个感谢屏幕)

python flask file-upload
2个回答
0
投票

您可以生成一个

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)))

0
投票

在代码中添加时间戳,以便它根据时间戳生成输出。因此,不会发生覆盖的情况

© www.soinside.com 2019 - 2024. All rights reserved.