存储服务器参考

自托管存储

一个与 Postgres 集成的 S3 兼容对象存储服务。

  • 使用 Postgres 作为其存储元数据的数据存储
  • 授权规则编写为 Postgres 行级安全 (RLS) 策略
  • 集成了 S3 作为存储后端(更多后端正在开发中!)
  • 极其轻量且高效

创建存储桶

post/bucket/

正文

  • name
    必需
    字符串
  • id
    可选
    字符串
  • public(公开)
    可选
    boolean
  • type
    可选
    enum(枚举)
  • file_size_limit(文件大小限制)
    可选
    以下任一选项
  • allowed_mime_types(允许的 MIME 类型)
    可选
    Array<string>(字符串数组)

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"name": "avatars"
3
}

获取所有存储桶

get/bucket/

查询参数

  • limit
    可选
    integer
  • offset
    可选
    integer
  • sortColumn(排序字段)
    可选
    enum(枚举)
  • sortOrder(排序顺序)
    可选
    enum(枚举)
  • search
    可选
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
[
2
{
3
"id": "bucket2",
4
"name": "bucket2",
5
"public": false,
6
"file_size_limit": 1000000,
7
"allowed_mime_types": [
8
"image/png",
9
"image/jpeg"
10
],
11
"owner": "4d56e902-f0a0-4662-8448-a4d9e643c142",
12
"created_at": "2021-02-17T04:43:32.770206+00:00",
13
"updated_at": "2021-02-17T04:43:32.770206+00:00"
14
}
15
]

清空存储桶

post/bucket/{bucketId}/empty

路径参数

  • bucketId(存储桶 ID)
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"message": "Empty bucket has been queued. Completion may take up to an hour."
3
}

获取存储桶详情

get/bucket/{bucketId}

路径参数

  • bucketId(存储桶 ID)
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"id": "lorem",
3
"name": "lorem",
4
"owner": "lorem",
5
"owner_id": "lorem",
6
"public": true,
7
"type": "STANDARD",
8
"created_at": "lorem",
9
"updated_at": "lorem"
10
}

更新存储桶属性

put/bucket/{bucketId}

正文

  • public(公开)
    可选
    boolean
  • file_size_limit(文件大小限制)
    可选
    以下任一选项
  • allowed_mime_types(允许的 MIME 类型)
    可选
    Array<string>(字符串数组)

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"message": "Successfully updated"
3
}

删除存储桶

delete/bucket/{bucketId}

路径参数

  • bucketId(存储桶 ID)
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"message": "Successfully deleted"
3
}

删除对象

delete/object/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"message": "Successfully deleted"
3
}

获取对象

get/object/{bucketName}/{wildcard}

送出对象

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 4XX

更新现有键处的对象

put/object/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"Id": "lorem",
3
"Key": "avatars/folder/cat.png"
4
}

上传新对象

post/object/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"Id": "lorem",
3
"Key": "avatars/folder/cat.png"
4
}

删除多个对象

delete/object/{bucketName}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串

正文

  • prefixes(前缀)
    必需
    Array<string>(字符串数组)

响应代码

  • 200
  • 4XX

响应 (200)

1
[
2
{
3
"name": "folder/cat.png",
4
"bucket_id": "avatars",
5
"owner": "317eadce-631a-4429-a0bb-f19a7a517b4a",
6
"id": "eaa8bdb5-2e00-4767-b5a9-d2502efe2196",
7
"updated_at": "2021-04-06T16:30:35.394674+00:00",
8
"created_at": "2021-04-06T16:30:35.394674+00:00",
9
"last_accessed_at": "2021-04-06T16:30:35.394674+00:00",
10
"metadata": {
11
"size": 1234
12
}
13
}
14
]

检索对象

get/object/authenticated/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

查询参数

  • download(下载)
    可选
    字符串

响应代码

  • 4XX

生成用于检索对象的预签名 URL

post/object/sign/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

正文

  • expiresIn
    必需
    integer
  • transform(转换)
    可选
    object

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"signedURL": "/object/sign/avatars/folder/cat.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJhdmF0YXJzL2ZvbGRlci9jYXQucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.s7Gt8ME80iREVxPhH01ZNv8oUn4XtaWsmiQ5csiUHn4"
3
}

通过预签名 URL 检索对象

get/object/sign/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

查询参数

  • download(下载)
    可选
    字符串
  • token
    必需
    字符串

响应代码

  • 4XX

生成用于检索对象的多个预签名 URL

post/object/sign/{bucketName}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串

正文

  • expiresIn
    必需
    integer
  • paths
    必需
    Array<string>(字符串数组)

响应代码

  • 200
  • 4XX

响应 (200)

1
[
2
{
3
"error": "Either the object does not exist or you do not have access to it",
4
"path": "folder/cat.png",
5
"signedURL": "/object/sign/avatars/folder/cat.png?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cmwiOiJhdmF0YXJzL2ZvbGRlci9jYXQucG5nIiwiaWF0IjoxNjE3NzI2MjczLCJleHAiOjE2MTc3MjcyNzN9.s7Gt8ME80iREVxPhH01ZNv8oUn4XtaWsmiQ5csiUHn4"
6
}
7
]

移动对象

post/object/move

正文

  • bucketId(存储桶 ID)
    必需
    字符串
  • sourceKey(源键)
    必需
    字符串
  • destinationBucket(目标存储桶)
    可选
    字符串
  • destinationKey(目标键)
    必需
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"message": "Successfully moved"
3
}

在特定前缀下搜索对象

post/object/list/{bucketName}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串

正文

  • prefix(前缀)
    必需
    字符串
  • limit
    可选
    integer
  • offset
    可选
    integer
  • sortBy(排序依据)
    可选
    object
  • search
    可选
    字符串

响应代码

  • 200
  • 4XX

响应 (200)

1
[
2
{
3
"name": "folder/cat.png",
4
"bucket_id": "avatars",
5
"owner": "317eadce-631a-4429-a0bb-f19a7a517b4a",
6
"id": "eaa8bdb5-2e00-4767-b5a9-d2502efe2196",
7
"updated_at": "2021-04-06T16:30:35.394674+00:00",
8
"created_at": "2021-04-06T16:30:35.394674+00:00",
9
"last_accessed_at": "2021-04-06T16:30:35.394674+00:00",
10
"metadata": {
11
"size": 1234
12
}
13
}
14
]

检索对象信息

get/object/info/{bucketName}/{wildcard}

对象信息

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 4XX

复制对象

post/object/copy

正文

  • bucketId(存储桶 ID)
    必需
    字符串
  • sourceKey(源键)
    必需
    字符串
  • destinationBucket(目标存储桶)
    可选
    字符串
  • destinationKey(目标键)
    必需
    字符串
  • metadata
    可选
    object
  • copyMetadata(复制元数据)
    可选
    boolean

响应代码

  • 200
  • 4XX

响应 (200)

1
{
2
"Id": "lorem",
3
"Key": "folder/destination.png",
4
"name": "lorem",
5
"bucket_id": "lorem",
6
"owner": "lorem",
7
"owner_id": "lorem",
8
"version": "lorem",
9
"id": "lorem",
10
"updated_at": "lorem",
11
"created_at": "lorem",
12
"last_accessed_at": "lorem",
13
"metadata": {},
14
"user_metadata": {},
15
"buckets": {
16
"id": "bucket2",
17
"name": "bucket2",
18
"public": false,
19
"file_size_limit": 1000000,
20
"allowed_mime_types": [
21
"image/png",
22
"image/jpeg"
23
],
24
"owner": "4d56e902-f0a0-4662-8448-a4d9e643c142",
25
"created_at": "2021-02-17T04:43:32.770206+00:00",
26
"updated_at": "2021-02-17T04:43:32.770206+00:00"
27
}
28
}

从公共存储桶检索对象

get/object/public/{bucketName}/{wildcard}

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

查询参数

  • download(下载)
    可选
    字符串

响应代码

  • 4XX

获取对象信息

get/object/info/public/{bucketName}/{wildcard}

返回对象信息

路径参数

  • bucketName(存储桶名称)
    必需
    字符串
  • *
    必需
    字符串

响应代码

  • 4XX