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

FastAPI实现从CDN/FTP服务器下载Excel文件的最优方案问询

FastAPI实现通过URL保存/读取服务器上的Excel文件

针对你需要通过API端点传入Excel文件URL来实现保存或读取的需求,这里提供更简洁高效的实现方案,替代原有的urllib代码:

依赖安装

首先安装所需的库:

pip install fastapi requests pandas uvicorn

完整实现代码

from fastapi import FastAPI, HTTPException
import requests
import pandas as pd
from pathlib import Path

app = FastAPI()

# 从URL下载并保存Excel文件到本地
def save_excel_from_url(file_url: str, save_path: str = "./downloaded_excel.xlsx") -> bool:
    try:
        # 流式下载,分块写入避免大文件占用过多内存
        with requests.get(file_url, stream=True, timeout=30) as resp:
            resp.raise_for_status()  # 触发HTTP错误(如404、500)
            with open(save_path, 'wb') as f:
                for chunk in resp.iter_content(chunk_size=8192):
                    f.write(chunk)
        return True
    except Exception as e:
        print(f"保存失败: {str(e)}")
        return False

# 直接从URL读取Excel内容(无需保存到本地)
def read_excel_from_url(file_url: str) -> pd.DataFrame:
    try:
        with requests.get(file_url, timeout=30) as resp:
            resp.raise_for_status()
            # 从字节流直接解析Excel
            return pd.read_excel(resp.content)
    except Exception as e:
        raise HTTPException(status_code=400, detail=f"读取失败: {str(e)}")

# API端点:保存Excel到服务器本地
@app.post("/save-excel")
async def save_excel(file_url: str, save_path: str = "./downloaded_excel.xlsx"):
    if save_excel_from_url(file_url, save_path):
        return {"msg": f"文件已保存至 {save_path}"}
    raise HTTPException(status_code=400, detail="保存失败,请检查URL有效性或文件权限")

# API端点:直接读取并返回Excel内容
@app.get("/read-excel")
async def read_excel(file_url: str):
    df = read_excel_from_url(file_url)
    return {
        "columns": df.columns.tolist(),
        "data": df.to_dict(orient="records")
    }

关键优化点

  • 替代urllib:用requests库简化HTTP/FTP请求代码,可读性和扩展性更强
  • 流式处理:大文件下载时用分块写入,避免内存溢出
  • 双模式支持:既可以保存文件到服务器本地,也可以直接读取内容返回,无需落地文件
  • 错误处理:捕获网络异常、HTTP错误、Excel解析错误,返回明确的错误信息
  • FTP支持:requests默认支持FTP URL,若需认证可在requests.get中添加auth=("用户名", "密码")参数

使用方法

  1. 启动服务:
uvicorn main:app --reload
  1. 调用保存接口(POST请求):
    • 示例:http://localhost:8000/save-excel?file_url=ftp://server/path/to/file.xlsx&save_path=./my_excel.xlsx
  2. 调用读取接口(GET请求):
    • 示例:http://localhost:8000/read-excel?file_url=http://example.com/file.xlsx

注意事项

  • 生产环境建议限制允许访问的URL域名,避免安全风险
  • 若处理超大Excel文件,可考虑增加内存限制或异步处理逻辑
  • 确保服务器有足够的磁盘空间用于保存文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:25