Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask send_文件正在发送旧文件而不是最新文件_Python_Flask_Glob_Shutil - Fatal编程技术网

Python Flask send_文件正在发送旧文件而不是最新文件

Python Flask send_文件正在发送旧文件而不是最新文件,python,flask,glob,shutil,Python,Flask,Glob,Shutil,我有一个flask应用程序,服务器使用一个flask路由创建一个csv文件并将其保存到服务器。使用客户端页面上生成的按钮,会触发另一个Flask路由,以获取最新文件,将其移动到tmp文件夹,并使用发送文件将该文件发送给用户 现在,当我第一次运行这个过程并下载文件时,一切都正常工作。但是,第二次运行该流程时,它会为我提供旧的CSV,而不是新生成的CSV。这会一直持续到我点击浏览器上的刷新按钮 以下是我的应用程序代码: from flask import Flask, render_template

我有一个flask应用程序,服务器使用一个flask
路由创建一个csv文件并将其保存到服务器。使用客户端页面上生成的按钮,会触发另一个Flask
路由
,以获取最新文件,将其移动到tmp文件夹,并使用
发送文件
将该文件发送给用户

现在,当我第一次运行这个过程并下载文件时,一切都正常工作。但是,第二次运行该流程时,它会为我提供旧的CSV,而不是新生成的CSV。这会一直持续到我点击浏览器上的刷新按钮

以下是我的应用程序代码:

from flask import Flask, render_template, flash, redirect, request, url_for, Response, send_file
import os
import time
import shutil
import glob

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'

@app.route('/')
def index():
    return render_template('index.html')


@app.route('/downloadcsv')
def downloadcsv():
    current = os.getcwd()
    try:
        list = glob.glob('{}/*.csv'.format(current))
    except:
        print('No file found')
    basename = os.path.basename(os.path.normpath(max(list, key=os.path.getctime)))
    shutil.move(basename, './tmp/{}'.format(basename))
    return send_file('./tmp/{}'.format(basename), as_attachment=True)
如果需要,以下是“生成”下载按钮的JS代码:

var download = '<div id="downloadsection" class="container-contact100-form-btn"><a href="/downloadcsv"><button id="download" class="contact100-form-btn"> <span>DOWNLOAD CSV</span></button></a></div>';
var下载=”;
如果下载过程过于复杂,请告诉我


谢谢

send_file
有一个您未配置的缓存超时。它将发送与缓存的文件相同的文件,除非您告诉它不要像这样缓存文件:

send_file('./tmp/{}'.format(basename), as_attachment=True, cache_timeout=0)
有关更多信息,请参阅以下参考资料:


@ritlew几乎回答了这个问题,为了补充他的答案,在添加
缓存\u timeout=0
后,清除浏览器缓存并以匿名模式点击URL

您也可以尝试:


什么叫“刷新浏览器”?你是说按刷新按钮吗?清除缓存?关闭并打开浏览器?抱歉-点击浏览器上的刷新按钮。为清晰起见进行了编辑。可能是相关的…我在使用基于chromium的浏览器时遇到了同样的问题。Firefox没有问题。这正是我想要的。非常感谢。如果这不能解决你的问题,我也会检查Aaron的评论。谢谢-你的解决方案确实解决了这个问题。有没有办法现在取消对上一个文件的缓存?通过更改下载url并添加
cache\u timeout=0
,我可以完成所有工作,但旧链接仍然提供了旧文件(新链接允许我更改文件)。嗨,我将cache\u timeout=0放入,但它不工作。有人能帮忙吗?