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

如何用Python+FastAPI开发带文件级加密的Excel下载API?

实现带文件级加密的Excel下载API方案

核心思路

要实现文件级加密(区别于工作表加密),推荐使用msoffcrypto-tool结合Pandas、FastAPI完成,该工具支持Office Open XML加密标准,完全兼容Mac/Linux/Windows平台,无需依赖Windows专属库。

具体实现步骤

1. 安装依赖包

pip install fastapi pandas msoffcrypto-tool uvicorn

2. 完整代码示例

from fastapi import FastAPI, Response
import pandas as pd
import msoffcrypto
import io
import tempfile
import os

app = FastAPI()

@app.get("/download-encrypted-excel")
def download_encrypted_excel():
    # 生成测试DataFrame(实际业务中替换为你的数据)
    df = pd.DataFrame({
        "姓名": ["张三", "李四", "王五"],
        "年龄": [28, 32, 25],
        "部门": ["技术部", "市场部", "财务部"]
    })

    # 第一步:导出未加密的临时Excel文件
    with tempfile.NamedTemporaryFile(mode='w+b', suffix='.xlsx', delete=False) as temp_unencrypted:
        df.to_excel(temp_unencrypted, index=False, engine='openpyxl')
        temp_path = temp_unencrypted.name

    # 第二步:对临时文件做文件级加密
    encrypted_buffer = io.BytesIO()
    with open(temp_path, 'rb') as f:
        office_file = msoffcrypto.OfficeFile(f)
        office_file.load_key(password='your_secure_pwd')  # 替换为实际密码,建议从配置/环境变量读取
        office_file.decrypt(encrypted_buffer)

    # 清理临时文件
    os.unlink(temp_path)

    # 第三步:返回加密文件给客户端
    return Response(
        content=encrypted_buffer.getvalue(),
        media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        headers={"Content-Disposition": 'attachment; filename="加密数据.xlsx"'}
    )

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

3. 关键细节说明

  • msoffcrypto-tool:直接支持Office文件的原生加密,生成的文件可被Excel、WPS等主流软件直接识别,输入密码即可解锁整个文件
  • 临时文件处理:针对大DataFrame场景,用临时文件避免内存过载,用完即时删除
  • 密码安全:禁止硬编码密码,建议从环境变量、配置中心等安全渠道获取

备选方案

如果对原生Excel加密要求不高,也可采用以下方式:

  • 将Excel文件打包为带密码的ZIP包:用Python内置zipfile库实现,但客户端需先解压再打开文件,体验略差
  • 使用加密压缩工具:调用系统级加密压缩命令(如7z),但需要依赖系统环境

内容的提问来源于stack exchange,提问作者최미리

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:15