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

Netlify Serverless函数上传Cloudinary视频遇请求体过大问题求助

视频上传至Cloudinary时遇到Netlify Serverless函数请求体过大问题

我在部署于Netlify的React应用中上传视频文件至Cloudinary时遇到问题。应用流程是:React页面表单将数据发送至API,API通过Axios向Netlify Serverless函数发起HTTP请求,再由该函数调用Cloudinary Node API存储视频文件。但在API向Serverless函数传递数据时,出现Error: Stream body too big错误,原因是视频文件超过了Netlify函数的6MB请求体限制。想请教两个问题:

  1. 是否需要压缩文件?
  2. 当前的链路(前端页面→api.js→Serverless函数)是否可行?

相关代码

page.jsx

const formHandler = async (formValues) => {
    try {
      ...
      const res = await addExercise(formValues);
      ...
    } catch (error) {
      console.log("error ", error);
    }
  };

api.js

import { instance } from "./instance";
...

 export const addExercise = async (data) => {
  try {
    const reader = new FileReader();
    reader.readAsDataURL(data.exerciseVideo[0]);
    reader.onloadend = async () => {
      const cloudVideo = reader.result;
      const cloudinaryResponse = await instance.post("upload-exerciseVideo", { cloudVideo });
      ...
    }
  } catch (error) {
    console.log("error", error);
  }
};

Serverless函数(upload-exerciseVideo.js)

import cloudinary from '../src/config/cloudinary';

export const handler = async (event, context) => {
  try {
    const data = JSON.parse(event.body);
    const { cloudVideo } = data;

    const cloudinaryRequest = await cloudinary.uploader
      .upload(cloudVideo, {
        resource_type: "video",
        upload_preset: "z9qxfc6q"
      });
    ...
    } catch (error) {
    
    console.log('error', error)
    return {
      statusCode: 400,
      body: JSON.stringify(error)
    }
  }
}

错误信息

Stream body too big错误截图


解决方案

1. 是否需要压缩文件?

不一定必须,但压缩是解决大文件问题的有效手段之一。如果视频本身体积超过6MB,压缩可以减小文件大小,绕过Netlify的请求体限制。但更推荐直接优化上传链路,避免把大文件传到Serverless函数。

2. 当前链路是否可行?

当前链路对小文件可行,但针对大视频文件存在明显缺陷——把视频转成DataURL后,体积会比原文件大30%左右,更容易触发Netlify的6MB限制。所以这个链路不适合大文件上传,需要调整。

具体优化方案

  • 前端直接上传至Cloudinary:这是最优解。Cloudinary支持前端直传,不需要经过Netlify Serverless函数。你可以在前端使用Cloudinary的上传Widget,或者直接调用Cloudinary的REST API,用已有的z9qxfc6q上传预设完成上传,完全绕开Serverless函数的请求体限制。
  • 若必须保留Serverless链路:
    • 不要用DataURL传递文件,改用FormData格式,在Serverless函数中直接处理流,但Netlify的6MB限制依然存在,仅适合小文件。
    • 或者使用分片上传:把大视频分成多个小于6MB的分片,逐个传给Serverless函数,再在函数端拼接后上传到Cloudinary,但这种方式实现复杂,不如前端直传高效。
  • 压缩文件作为辅助手段:如果业务允许,在前端上传前用FFmpeg.js等工具压缩视频,减小体积后再上传,也能缓解问题,但无法从根本上解决大文件的限制问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:50:19