云存储10大服务对比:上传限制、价格和功能|S3/GCS/Azure/R2
选择云存储服务时,关键比较点包括单个上传限制、多部分上传支持、免费层、价格和出站(传输)成本。虽然AWS S3是事实上的行业标准,但根据成本、边缘交付和特定用途,有更合适的选择。本文比较了10大主要服务的规格,并提供了按用途的建议。
单一上传限制、分块上传限制和免费额度对比表
| 服务 | 单一对象限制 | 分段上传限制 | 免费套餐 | 月度预计成本(100GB) |
|---|---|---|---|---|
| AWS S3 | 5 GB | 5 TB | 5GB·2,000 请求/月(12 个月) | $2.30〜 |
| Google Cloud Storage | 5 TB(单个对象) | 5 TB | 5GB(Standard、美国东部) | $2.00〜 |
| Azure Blob Storage | 块:4.75TB、页面:8TB | 195GB/块 × 50,000块 | 12个月5GB(LRS) | $1.84〜 |
| Cloudflare R2 | 5 GB | 5 TB | 10GB/月·100万操作/月(永久) | $1.50(出站流量免费) |
| Backblaze B2 | 5 GB | 10 TB | 10GB(永久) | $0.60〜 |
| DigitalOcean Spaces | 5 GB | 5 TB | 250GB + 1TB转移/月($5~) | $5(包含至250GB) |
| Wasabi | 1 TB | 1 TB | 无 (仅限试用) | $0.68(出站流量免费) |
| MinIO | 5 TB(实现依赖) | 5 TB | 自托管(无限制) | 仅基础设施成本 |
| Firebase Storage | 事实上无限制(使用 GCS) | GCS 兼容 | 5GB(Spark 计划) | $0.026/GB〜 |
| Supabase Storage | 50MB(Free)/ 50GB(Pro) | Pro 及以上版本支持 | 1GB(免费计划) | $0.021/GB(Pro) |
※定价为 2026 年 4 月的估计值。价格因地区、存储类和使用量而异。大多数出站(数据传输)成本不包括在上表中。
各服务的特点和选择方法
AWS S3
云存储事实上的标准。许多服务实现了S3兼容API,库和工具的生态系统最为成熟。多部分上传可以用 <code>aws-sdk</code> 自动化,最小块大小5MB、最多10,000个部分,可上传最大5TB的对象。与CloudFront集成可轻松实现边缘交付。但是出站成本较高(从$0.09/GB起),对于有大量数据传输的服务来说成本是一个挑战。
Google Cloud Storage(GCS)
单一对象限制为5TB,非常适合需要将大文件作为单一对象进行管理的使用场景。其优势在于与BigQuery、Vertex AI等GCP服务的无缝集成,是构建数据分析管道的首选。传输成本相比S3往往略低。
Azure Blob Storage
与 Microsoft 生态系统(Office 365、Active Directory、Azure Functions 等)的兼容性很高,拥有丰富的企业级身份认证和合规性功能。块 Blob 支持最大 4.75TB 的对象,页 Blob(用于虚拟磁盘)支持最大 8TB。可通过热层、冷层和归档层进行成本优化。
Cloudflare R2
主要特点是出站成本免费。由于采用 S3 兼容 API,可以几乎原样使用现有的 S3 客户端。与 Workers(边缘计算)的集成强大,支持在边缘直接操作存储的架构。提供永久免费的 10GB/月,非常适合个人开发和小规模服务的起点。
Backblaze B2
提供业界最低级别的定价 ($0.006/GB/月),非常适合注重成本的备份和媒体归档用例。与 Cloudflare 的 "Bandwidth Alliance" 结合,B2 到 Cloudflare 的出口免费,这种组合很受欢迎。它提供 S3 兼容 API,易于迁移。
DigitalOcean Spaces
以月 $5 起的固定费率计划为特色,包括 250GB 存储空间和 1TB 传输带宽。其优势是对小规模服务易于预算预测。CDN 作为标准配置,设置简单。在与 DigitalOcean Droplets(虚拟机)相同的区域使用时,转移成本免费。
Wasabi
S3 兼容,出站免费(从 Wasabi 直接下载),存储费用低廉($0.0068/GB/月)。但要注意最低保留期规则:90 天内删除的数据也会产生 90 天的费用。适合备份和长期冷数据存储。
MinIO
开源S3兼容对象存储,可在本地部署或私有云中自我托管。与Kubernetes具有高度兼容性,并提供官方Helm图表。用于不希望将数据转移到云端的受管制行业,以及本地部署环境中的开发和测试用途。
Firebase Storage
内部使用GCS,可以轻松实现使用Firebase SDK从移动/Web应用的直接上传。其优势是与Firebase Authentication集成的细粒度访问控制(Security Rules)。但是,在Spark(免费)计划中,单个文件的大小限制可能会被设置得相对较低。
Supabase Storage
Supabase 是基于 PostgreSQL 的 BaaS(后端即服务)的存储功能。其独特优势是与 Supabase Auth 的基于 RLS(行级安全)的访问控制。免费计划的文件大小限制为 50MB,所以大文件需要 Pro 或更高版本的计划(50GB/文件)。
按用途推荐
| 用途 | 第一选择 | 原因 |
|---|---|---|
| 小规模 SaaS 的起点 | Cloudflare R2 | 免费出口、永久免费套餐、S3 兼容 |
| 大容量媒体存档 | Backblaze B2 + Cloudflare | 最低价存储 + 免费出口组合 |
| 边缘交付、全球部署 | Cloudflare R2 / AWS S3 + CloudFront | CDN 集成和低延迟交付 |
| 成本优先 | Wasabi / Backblaze B2 | 业界最低级别的存储定价 |
| 企业合规性 | AWS S3 / Azure Blob | 丰富的身份验证、加密和审计功能 |
| 移动应用直接上传 | Firebase Storage / Supabase Storage | 易于 SDK 和身份验证集成 |
| 本地部署和私有云 | MinIO | S3 兼容、自托管和开源选项 |
| 与 GCP 服务的集成 | Google Cloud Storage | 与 BigQuery 和 Vertex AI 的无缝集成 |
什么是分段上传
分块上传是一种将大文件分成较小部分并并行上传的机制。对于 S3 上超过 100MB 的文件建议使用,对于超过 5GB 的文件为必需。主要优势如下。
- 并行上传提高吞吐量
- 网络中断时仅可重新传输失败的部分(可恢复)
- 绕过单一请求的5GB限制,可传输最多5TB
// AWS SDK v3 でのマルチパートアップロード例
import { S3Client, CreateMultipartUploadCommand,
UploadPartCommand, CompleteMultipartUploadCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({ region: 'ap-northeast-1' });
async function multipartUpload(bucket, key, file) {
// アップロードの開始
const { UploadId } = await s3.send(new CreateMultipartUploadCommand({
Bucket: bucket, Key: key,
}));
const chunkSize = 10 * 1024 * 1024; // 10MB
const parts = [];
for (let i = 0; i * chunkSize < file.size; i++) {
const chunk = file.slice(i * chunkSize, (i + 1) * chunkSize);
const { ETag } = await s3.send(new UploadPartCommand({
Bucket: bucket, Key: key,
UploadId, PartNumber: i + 1,
Body: chunk,
}));
parts.push({ ETag, PartNumber: i + 1 });
}
// パーツの結合(完了)
await s3.send(new CompleteMultipartUploadCommand({
Bucket: bucket, Key: key,
UploadId, MultipartUpload: { Parts: parts },
}));
}
本文中可用的测试文件(免费)
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">边界值测试文件列表</a> — 测试各云存储服务上限附近的上传
- → <a href="/ja/files/images/png/" class="text-primary-600 dark:text-primary-400 hover:underline">PNG 测试图像列表</a> — 使用各种尺寸的图像验证存储行为
相关文章
- → <a href="/ja/blog/s3-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">AWS S3・CloudFront 文件上传限制总结</a>
- → <a href="/ja/blog/how-to-test-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">如何正确测试文件上传限制</a>
- → <a href="/ja/blog/mb-vs-mib-file-size/" class="text-primary-600 dark:text-primary-400 hover:underline">MB 和 MiB 的区别|文件大小单位的正确理解</a>