使用Flask无法下载具有实际名称的文件

4

我正在尝试使用Flask下载文件,我的代码如下:

@app.route('/Download')
def Down():
    rpm = request.args.get('rpm')
    root = '/home/rpmbuild/RPMS/'
    return send_from_directory(root,rpm)

当我点击url时,文件名已经传递。虽然我可以下载文件,但文件名始终为“Download”。我需要它是实际的文件名。我也尝试了send_file(),但它也使用名称Download进行下载。
1个回答

3

send_from_directory的“选项”与sendfile相同:

flask.send_file(filename_or_fp, mimetype=None, as_attachment=False,
                <b>attachment_filename=None</b>, add_etags=True,
                cache_timeout=None, conditional=False,
                last_modified=None)

因此,您应该使用以下方式调用:

@app.route('/Download')
def Down():
    rpm = request.args.get('rpm')
    root = '/home/rpmbuild/RPMS/'
    return send_from_directory(root,rpm,<b>attachment_filename='foo.ext'</b>)

当然,您需要用要给文件的名称来替换'foo.ext'。您可能还想将as_attachment参数设置为True

如果您想使用相同的名称,可以使用os.path.basename(..)

<b>import os</b>

@app.route('/Download')
def Down():
    rpm = request.args.get('rpm')
    root = '/home/rpmbuild/RPMS/'
    return send_from_directory(root,rpm,<b>as_attachment=True</b>,
                               attachment_filename=<b>os.path.basename(rpm)</b>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接