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

Lambda生成Excel经API网关传输后损坏,无法打开求助

问题原因及解决方案

核心问题分析

文件损坏由三个关键错误导致:

  • Lambda返回的Base64编码是字节类型而非字符串,API网关传输时会出现编码异常;
  • Lambda响应未设置正确的Content-Type头部,导致API网关无法正确识别二进制媒体类型;
  • 前端创建File对象时指定了错误的MIME类型,导致文件格式标识错误。

修复步骤

1. 修正Lambda函数代码

需做两处修改:将Base64编码结果转为字符串,添加正确的Content-Type头部。

修改后的Lambda代码:

import json
import io
import base64
from openpyxl import Workbook

data = [
    ["HEAD1", "Head2"],
    ["hello", "operating_system"],
    ["durablility", "material"],
    ["longevity", "item_name"],
]

def lambda_handler(event, context):
    wb = Workbook()
    ws = wb.active
    for r in data:
      ws.append(r)
    buffer = io.BytesIO()
    wb.save(buffer)
    excel_final = buffer.getvalue()
    buffer.close()
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin': '*',
            # 添加正确的Excel MIME类型
            'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        },
        # 将bytes类型的Base64编码转为字符串
        'body': base64.b64encode(excel_final).decode('utf-8'),
        'isBase64Encoded': True
    }

2. 修正前端代码

修改File对象的type参数,匹配正确的Excel MIME类型:

修改后的前端代码:

const requestOptions = {
    method: 'GET',
    headers: {
       'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    }, 
};  

fetch(url, requestOptions)
.then(response => {
    if (response.ok) {
        return response.arrayBuffer();
    }
})
.then(blob => {
    // 修正MIME类型为正确的Excel格式类型
    const file = new File([blob], "demo.xlsx", {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
    const link = document.createElement('a')
    const url = URL.createObjectURL(file)

    link.href = url
    link.download = file.name
    document.body.appendChild(link)
    link.click()
    // 清理URL对象,避免内存泄漏
    URL.revokeObjectURL(url)
    document.body.removeChild(link)
})

3. 验证API网关配置

确保API网关的二进制媒体类型已正确添加application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,并且部署了最新的API配置。

验证方法

修改完成后重新部署Lambda函数和API网关,前端发起请求下载文件,此时应该可以正常打开Excel文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:13:09