flask send_file 下载文件,断点续传.md

本文介绍了如何在Flask中使用`send_file`函数实现文件的断点续传下载。通过设置特定参数,如`as_attachment`、`attachment_filename`和`conditional`,可以实现以附件形式下载并支持断点续传。测试时,可以通过查看响应头信息,利用`Range`和`If-Range`字段来指定下载的字节范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数包含在 flask.helpers文件中:

def send_file(
    filename_or_fp,
    mimetype=None,
    as_attachment=False,
    attachment_filename=None,
    add_etags=True,
    cache_timeout=None,
    conditional=False,
    last_modified=None,
):
    ...

参数:

  • filename_or_fp: 是一个文件描述符或文件绝对路径或相对路径。
  • mimetype:文件类型 string,可不填;
  • as_attachment: bool, 是否在 header 中添加 Content-Disposition 字段,比如 Content-Disposition: attachment; filename=anaconda3.tar.gzattachment 为以附件方式下载,filename 是下载时默认的文件名。
  • attachment_filename: 下载时使用的文件名 string,若省略,则使用文件实际真实名称;
  • add_etags:默认添加 etags,string;
  • cache_timeout:缓存时间,单位秒,默认使用 config 中的 send_file_max_age_default
  • conditional:是否支持断点续传,bool;
  • last_modified: 文件的最后修改时间,时间戳,不填的话使用文件实际真实的最后修改时间。

断点续传测试

首先查看响应头文件:

HTTP/1.0 200 OK
Content-Disposition: attachment; filename=anaconda3.tar.gz
Content-Length: 3166777919         # 整个文件的大小
Content-Type: application/x-tar
Last-Modified: Sat, 29 Sep 2018 03:58:14 GMT
Cache-Control: public, max-age=43200
Expires: Tue, 12 Nov 2019 19:38:55 GMT
ETag: "1538193494.33892-3166777919-2712605243"     # 获取 Etag
Date: Tue, 12 Nov 2019 07:38:55 GMT
Accept-Ranges: bytes
Server: Werkzeug/0.16.0 Python/3.7.0

比如我想从 第 3166777500 字节开始下载(那么可下载的内容大小 为 3166777919 - 3166777500 = 419):
那么请求需要携带 Range 字段和 If-Match 字段的 header

curl http://dev.example.com:5000/download -i --header "Range: bytes=3166777500-" --header "If-Match: '1538193494.33892-3166777919-2712605243'"
HTTP/1.0 206 PARTIAL CONTENT   # 状态码 206 
Content-Length: 419             # 内容大小正确
Content-Type: application/x-tar
Last-Modified: Sat, 29 Sep 2018 03:58:14 GMT
Cache-Control: public, max-age=43200
Expires: Tue, 12 Nov 2019 19:29:38 GMT
ETag: "1538193494.33892-3166777919-2712605243"
Date: Tue, 12 Nov 2019 07:29:38 GMT
Accept-Ranges: bytes
Content-Range: bytes 3166777500-3166777918/3166777919
Server: Werkzeug/0.16.0 Python/3.7.0

下载到文件:

curl http://dev.example.com:5000/download -i --header "Range: bytes=3166777500-" --header "If-Match: '1538193494.33892-3166777919-2712605243'" --output xxx.tar
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值