存储

S3文件上传

学习如何使用S3将文件上传至Supabase存储


您可以使用 S3 协议将文件上传至 Supabase Storage。要开始使用 S3,请参阅 S3 设置指南

S3 协议支持以下文件上传方式:

  • 单次请求上传
  • 通过分片上传(Multipart Upload)进行多次请求上传

单次请求上传

PutObject 操作通过单次请求上传文件,其行为与 Supabase SDK 的标准上传一致。

对于较小文件且重试整个上传不会造成问题时,请使用 PutObject。付费计划中的最大文件大小为 50 GB。

例如,使用 JavaScript 和 aws-sdk 客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'const s3Client = new S3Client({...})const file = fs.createReadStream('path/to/file')const uploadCommand = new PutObjectCommand({ Bucket: 'bucket-name', Key: 'path/to/file', Body: file, ContentType: 'image/jpeg',})await s3Client.send(uploadCommand)

分片上传

分片上传将文件分割成较小的部分并并行上传,可在高速网络下最大化上传速度。当上传大文件时,这种方式允许您在网络出现问题时重试单个分片的上传。

对于服务器端上传,当您希望以牺牲可恢复性为代价来最大化上传速度时,此方法比可恢复上传更可取。付费计划中的最大文件大小为 50 GB。

分块上传文件

使用 S3 客户端中的 Upload 类来实现文件的分块上传。以下是一个 JavaScript 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { S3Client } from '@aws-sdk/client-s3'import { Upload } from '@aws-sdk/lib-storage'const s3Client = new S3Client({...})const file = fs.createReadStream('path/to/very-large-file')const upload = new Upload(s3Client, { Bucket: 'bucket-name', Key: 'path/to/file', ContentType: 'image/jpeg', Body: file,})await uploader.done()

中止分块上传

所有分块上传操作会在 24 小时后自动中止。如需提前中止分块上传,可以使用 AbortMultipartUpload 操作。