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

Python后端返回文件或错误,Ajax因Blob类型无法读取错误信息的解决方法

解决方案:文件下载与错误信息读取兼容实现

后端(Python/Django)修改

先处理文件不存在的异常,返回JSON格式的错误响应并设置错误状态码:

import os
from django.http import HttpResponse, JsonResponse

def your_view(request):
    file_path = 'test.bin'
    if not os.path.exists(file_path):
        return JsonResponse({'error': '文件不存在'}, status=404)
    
    with open(file_path, 'rb') as file:
        file_content = file.read()
        response = HttpResponse(file_content, content_type='application/octet-stream')
        response['Content-Disposition'] = f'attachment;filename=test.bin'
        return response

前端(jQuery Ajax)修改

在error回调中,通过FileReader将Blob类型的响应转换为文本,从而解析错误信息:

$.ajax({
    url: 'test',
    type: 'GET',
    headers: { 'X-CSRFToken': getCookie('csrftoken') },
    xhrFields: {
        'responseType': 'blob'
    },
    success: function(data, status, xhr) {
        var contentDisposition = xhr.getResponseHeader('Content-Disposition');
        var matches = /filename=([^;]+)/ig.exec(contentDisposition);
        var fileName = (matches[1] || 'untitled').trim();

        var blob = new Blob([data], {type: xhr.getResponseHeader('Content-Type')});
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = fileName;
        link.click();
        // 释放URL对象避免内存泄漏
        window.URL.revokeObjectURL(link.href);
    },
    error: function(xhr, status, error) {
        var reader = new FileReader();
        reader.onload = function(e) {
            try {
                var errorData = JSON.parse(e.target.result);
                alert(errorData.error); // 可替换为自定义的错误展示逻辑
            } catch (err) {
                // 非JSON格式错误直接显示文本内容
                alert(e.target.result);
            }
        };
        reader.readAsText(xhr.response);
    }
});

核心逻辑说明

  • 后端:提前判断文件存在性,返回带错误状态码的JSON响应,确保前端触发error回调
  • 前端:利用FileReader读取Blob格式的错误响应,转换为文本后解析成JSON,即可获取并展示错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:21