You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask返回的zip文件下载后无法打开,提示不是归档文件或头部错误

问题根因排查及解决办法

1. 前端XHR未指定二进制响应类型(最高发原因)

默认XMLHttpRequest会将响应内容解析为UTF-8文本,二进制的ZIP数据在文本转码过程中会被不可逆损坏,导致文件头部异常无法识别。
解决方法:在初始化XHR请求时明确指定响应类型为blob:

// 在xhr.open()之后、xhr.send()之前添加以下代码
xhr.responseType = 'blob';

2. Blob构造未指定正确MIME类型

未指定类型的Blob可能被浏览器默认添加错误的类型标识,导致二进制数据被修改。
解决方法:构造Blob时明确指定ZIP的MIME类型:

var zipFile = new Blob([this.response], { type: 'application/zip' })

3. Flask后端响应头配置缺失

send_file默认的响应头可能不符合下载要求,导致数据传输异常。
解决方法:调整Flask的send_file参数,明确指定MIME类型和下载配置:

from flask import send_file
import os

@app.route("/profile", methods=["GET", "POST"])
def profile():
    if request.method == "GET":
        return render_template("profile.html")
    if request.method == "POST":
        # 此处建议使用绝对路径读取文件,避免相对路径读取错误
        zip_path = os.path.join(app.root_path, "user_projects/delivery.zip")
        return send_file(
            zip_path,
            mimetype='application/zip',
            as_attachment=True,
            download_name='delivery.zip'
        )

4. 下载链接缺少download属性(可选优化)

部分浏览器如果没有指定download属性,可能会修改文件后缀或者内容解析逻辑。
解决方法:给a标签添加download属性:

downloadLink.download = 'delivery.zip'

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:03