Python 拒绝flask中已上载的文件

Python 拒绝flask中已上载的文件,python,flask,Python,Flask,嗨,我正在用flask上传文件。 不知怎的,最近有东西坏了,我们想否认已经存在的文件。它过去是自动完成的。现在,在调整功能时,我看不出它以某种方式工作。我试过几件事,现在我被困在这件事上了。我们从另一台服务器发出一个curl请求,然后自动上传。我们有一个前端,但纯粹是因为应用程序的当前状态,相关的是我们列出了一个目录,我们希望禁止覆盖这些文件 DENY_UPLOADED_IMAGES = os.listdir(f) @app.route("/upload") def u

嗨,我正在用flask上传文件。 不知怎的,最近有东西坏了,我们想否认已经存在的文件。它过去是自动完成的。现在,在调整功能时,我看不出它以某种方式工作。我试过几件事,现在我被困在这件事上了。我们从另一台服务器发出一个curl请求,然后自动上传。我们有一个前端,但纯粹是因为应用程序的当前状态,相关的是我们列出了一个目录,我们希望禁止覆盖这些文件

DENY_UPLOADED_IMAGES = os.listdir(f)  

@app.route("/upload")
def upload():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # if user does not select file, browser also
        # submit an empty part without filename
        if 'file' in DENY_UPLOADED_IMAGES:
            flash('File already uploaded')
            return redirect(request.url)
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',
                                    filename=filename))

    return render_template('upload.html')
这是全局级别的,仅在应用程序启动时读取当前上载文件的列表。如果文件名是在应用程序(或工作程序)重新启动后上载的,则不会添加到此列表中

可能最好在上传时检查每一个:

        if os.path.exists(file.filename):
            flash('File already uploaded')
            return redirect(request.url)

如果与多个WSGI工作进程一起运行,这可能仍然会导致竞争条件。

如果拒绝上传图像中的“文件”不检查您的文件是否在列表中,则只检查字符串“文件”。此外,您还可以更新
DENY_UPLOADED_IMAGES
当您保存新文件时,
DENY_UPLOADED_IMAGES=os.listdir(f)
仅在服务器启动时执行,您需要附加新文件名(还要注意文件名和文件路径;)。在编程过程中添加一些打印,以确保它达到您的预期效果。刚用打印测试过,不知何故,目录似乎是空的,这是一个很好的建议。我使用了错误的方法,实际上我希望上传循环检查该目录中是否存在文件。我本以为这也会起作用,但不知怎的,它不会'tdef upload():if request.method=='POST':#如果'file'不在request.files:flash('No file part'),检查POST请求是否包含文件部分return redirect(request.url)file=request.files['file']if file.filename='':flash(“没有选择的文件”)return redirect(request.url)if os.path.exists(file.filename):flash(“文件已上载”)return redirect(request.url)
        if os.path.exists(file.filename):
            flash('File already uploaded')
            return redirect(request.url)