Python 使用send_from_目录和文件名从服务器位置下载文件

Python 使用send_from_目录和文件名从服务器位置下载文件,python,flask,download,upload,Python,Flask,Download,Upload,我正在努力理解如何将上传的文件名传递到flask中的下一个@app.route以检索保存在服务器上的文件 我已经能够创建一个表单来像这样将文件上传到服务器,并且能够将文件数据和文件名呈现到正在进行的视图中 @app.route('/file_upload', methods=['GET', 'POST']) def upload(): form = UploadForm() if form.validate_on_submit(): f=form.file.data file

我正在努力理解如何将上传的文件名传递到flask中的下一个@app.route以检索保存在服务器上的文件

我已经能够创建一个表单来像这样将文件上传到服务器,并且能够将文件数据和文件名呈现到正在进行的视图中

@app.route('/file_upload', methods=['GET', 'POST'])
def upload():

form = UploadForm()

if form.validate_on_submit():
    f=form.file.data
    filename = secure_filename(f.filename)
    file_path = os.path.join(UPLOAD_FOLDER, filename)
    f.save(file_path)
    Input_data_dataframe = pd.read_excel(f)
    return render_template('Set_parameters.html',filename=filename,tables=[Input_data_dataframe.to_html(classes=["table table-dark table-hover"], header="true", index=False,)])

return render_template('file_upload.html',form=form)
文件成功保存在所需的服务器目标,文件名也会在下一个视图中呈现,如下所示:

我现在希望从服务器位置检索此文件以进行进一步处理。我知道我可以使用send_from_directory()函数来检索文件,但是我不确定如何使用上一个@app.route(“/file_upload”)中的正确文件名来实现它

目前,如果我按原样运行,我会得到这个错误 TypeError:processing()缺少1个必需的位置参数:“filename”据我所知,我尚未将文件名传递给函数。。我只是不确定如何在不将文件名硬编码到代码中,然后使用同一文件进行进一步处理的情况下执行此操作


非常感谢您的帮助。

您的
处理
函数需要URL中的
文件名
参数。您可以在此处看到应该如何执行:

此视图的路径应为:
/Set\u Parameters//
。这意味着from的
action
属性应该是,例如:
action=“/Set\u Parameters/This\u是\u file.xlsx”
。 如果使用flask模板在flask中呈现该表单,如果在呈现上下文中具有文件名,则应该很容易:

<form action="/Set_Parameters/{{ filename }}">
...
</form>

...

非常感谢Michal S。我解决了这个问题!我可以传递文件名并从服务器检索文件。。我不仅仅是在将该文件放回数据帧时遇到问题。。我收到以下错误:ValueError:无效的文件路径或缓冲区对象类型:
send\u from\u directory
创建一个准备由视图返回的响应对象()。要打开文件,您可能只需使用常规的
open(file\u path)
函数即可。文件路径应该是
app.config['UPLOAD\u FOLDER']+filename
,但我不确定
<form action="/Set_Parameters/{{ filename }}">
...
</form>