跳到内容

主要服务的上传上限一览

整理了各类 Web 服务与云存储的文件上传上限,可作为开发时校验设计与边界值测试的参考。

邮件与消息服务

邮件与聊天服务对附件大小设有限制。Gmail 与 Outlook 通常为 25MB,但 Base64 编码会带来额外开销,实际可发送的文件会略小一些。

服务 上限大小 备注 测试文件
Gmail 25MB 超过 25MB 会自动转换为 Google Drive 链接 24.9MB / 25MB / 25.1MB
Outlook 25MB Microsoft 365 最高 150MB(由管理员设定) 24.9MB / 25MB / 25.1MB
LINE 50MB 视频最长 5 分钟,图片在发送时会被压缩 50MB
Discord(免费) 25MB 开通 Nitro 后最高 500MB 24.9MB / 25MB / 25.1MB
Discord Nitro 500MB Nitro Basic 为 50MB -
Slack 1GB 所有套餐均可上传至 1GB -

社交与媒体平台

社交平台对图片和视频的上传格式与大小均有限制。图片通常会被自动缩放和重新压缩,原始文件大小往往无法保留。

服务 上限大小 备注
Twitter / X(图片) 5MB(PNG/JPG) GIF 为 15MB,视频经浏览器上传为 512MB
Instagram 8MB(图片) 视频 4GB,Reels 4GB
Facebook 10MB(图片) 视频为 10GB

CMS 与 Web 应用

在 WordPress 等 CMS 中,默认上传上限由 PHP 配置与服务器自身限制决定。详细的修改方法请参见如何修改 WordPress 的上传上限

服务 / CMS 默认上限 备注 测试文件
WordPress 2MB〜10MB 取决于 PHP 与服务器配置,可修改 9.9MB / 10MB / 10.1MB
Shopify 20MB 图片、视频与其他文件通用 -

云存储与开发者服务

云存储与开发者服务通常支持大容量上传,但单次请求的上限与分段上传的上限往往不同。

服务 上限大小 备注
AWS S3 5GB(单次) / 5TB(分段) 超过 100MB 建议使用分段上传
Google Drive 5TB 需要存储套餐有可用空间
Dropbox 2GB(网页) / 50GB(桌面应用) 通过 API 最高支持 350GB
GitHub 100MB(单个文件) 配合 Git LFS 最高 5GB;整个仓库建议不超过 5GB
Cloudflare(Free) 100MB Pro 500MB、Business 500MB、Enterprise 无限制

如何测试上传上限

要准确测出服务的上传上限,边界值测试最为有效。使用略小于、恰好等于、略大于上限的三个文件测试,即可验证校验逻辑是否精确。

DevLab 提供各种尺寸的阈值测试文件,大小精确到字节,并附有 MD5 与 SHA-256 校验值,可用于下载后的完整性核对。

注意事项

  • 以上限制值为 2024 年时的信息,请以各服务的最新规格为准。
  • 使用 Base64 编码时,实际可发送的文件大小约为标称上限的 75%(开销为 4/3 倍)。
  • 同一服务内,上限也可能因套餐以及经由 API 还是浏览器而不同。
  • 受网络环境与超时设置影响,即使未超上限也可能上传失败。

❓ 常见问题

表中的上限指的是附件还是链接分享?
指的是附件本身的上限。多数服务在超出上限后会自动改为存入云端并发送链接,此时实际上限取决于存储产品的限制。Gmail 超过 25MB 转为 Google 云端硬盘链接是典型例子,收件人能否打开则取决于该链接的共享设置。
自家服务的上传上限该按什么标准来定?
起点大致是「预期最大用例实测值的两倍」——数百页扫描 PDF 取 50MB,文章正文取几百 KB。先测量真实文件再决定。定下之后,PHP 的 upload_max_filesize 与 post_max_size、nginx 的 client_max_body_size 以及各处超时都必须基于同一前提,否则总会在某一环卡住。
正好等于上限的文件能通过吗?
多数情况下不能。在 multipart/form-data 中,边界字符串与各部分的头部会让请求体比文件本身大出几百字节,因此文件即使正好等于上限,整个请求也会超出。上限判定基于请求体大小,所以实现侧的上限应比对外声明的文件上限略大,并用边界值测试文件实测确认。