【问题标题】:problem to create a downloadable file in flask在烧瓶中创建可下载文件的问题
【发布时间】:2020-12-27 03:04:17
【问题描述】:

我想创建可下载的文件,我做到了。 但是当我想在下载管理器中下载它时,我无法暂停/恢复它,它必须下载整个文件。

这是我的代码:

@app.route('/Media/music/<filename>', methods=['GET', 'POST'])
def Music(filename):
    return send_file('static//Media/music/'+filename, as_attachment=True)

|Flask 和 Python|

如果有任何帮助或参考,我将不胜感激。 谢谢。

【问题讨论】:

    标签: python flask download


    【解决方案1】:

    如果浏览器正在发送Range header,您必须检索它,然后打开文件的字节范围并将其作为文件指针传递给send_file

    partial_file = f.seek(start_of_byte_range)
    ...return send_file(partial_file, ....), 206
    

    https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

    https://stackoverflow.com/a/29376554/1399491

    并确保您使用带有部分文件范围的 HTTP 206 进行响应,而不是正常的 200 或其他 HTTP 代码

    Range header info

    这是一个粗略的未经测试版本:

    from flask import request
    
    @app.route('/Media/music/<filename>', methods=['GET', 'POST'])
    def Music(filename):
        range_header = request.headers.get('Range')
        if range_header is not None:
            with open('static//Media/music/'+filename, 'rb') as f:
                partial_file = f.seek(range_header)
                return send_file(partial_file, as_attachment=True, conditional=True), 206
            raise Exception("Unknown exception")
    
        return send_file('static//Media/music/'+filename, as_attachment=True)
    

    【讨论】:

    • 感谢您的帮助。我不是 Flask 的专业人士,你能告诉我我应该在我的代码中编辑什么吗?
    • @Revisto 当然,我可以添加更多 sn-ps,但您需要调整
    • 当然,我将不胜感激。
    • @Revisto ok 添加了一些细节,希望对您有所帮助
    • 非常感谢
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2023-03-03
    • 2021-07-15
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多