基于 AWS 架构的 API,您可以使用任何编程语言发送 HTTP/HTTPS 请求。所有请求参数均通过 HTTP/HTTPS 请求头以 Key: Value 的形式传递。 特别的,FSS仅支持文件相关的API,不支持区域相关配置。 access key id是桶名,secret access key是桶密码。
<bucket>/<path>
<bucket>
.fss-my.vhostgo.com/<path>
bucket、path
<> 是参数内容,是需要用户填写的,填写时,把 <> 去掉。
bucket
,是创建的桶名;path
,文件/文件夹的路径。
注
文件上传和客户端管理使用路径风格,网页访问get/head使用虚拟机风格。
兼容公共请求头
参数 | 说明 |
---|---|
Authorization | 兼容 |
Content-Length | 兼容 |
Content-MD5 | 兼容 |
Content-Type | 兼容 |
Date | 兼容 |
Host | 兼容 |
x-amz-content-sha256 | 兼容 |
x-amz-date | 兼容 |
x-amz-security-token | 不兼容 |
兼容公共响应头
参数 | 说明 |
---|---|
Content-Length | 兼容 |
Content-Type | 兼容 |
ETag | 兼容 |
Date | 兼容 |
x-amz-delete-marker | 不支持 |
x-amz-request-id | 兼容 |
x-amz-id-2 | 不支持 |
x-amz-version-id | 不支持 |
PUT /<bucket>/<path_to_file>
上传参数
除了所有操作通用的请求头之外,操作的此实现还可以使用以下请求头
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
Content-Length | 是 | string | 请求内容长度 |
Content-MD5 | 否 | string | 上传文件的 MD5 值,如果请求中文件太大计算 MD5 不方便,可以为空 |
Content-Type | 否 | string | 文件类型,默认使用文件扩展名作为文件类型 |
x-amz-meta-x | 否 | string | 文件元数据,见 Metadata |
注
响应信息
200
举例
xxxxxxxxxx
61PUT /bucket-7/1.txt HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: Mon, 11 Jul 2023 03:20:29 GMT
4Authorization: authorization string
5Content-Type: text/plain
6Content-Length: 1314
分片限制
限制项 | 规格 |
---|---|
单个Part大小 | 1M,除去最后一个分片外,其它均为1M大小的块 |
初始化分块上传任务,并得到全局唯一任务 UploadId,后续分块任务相关接口都需要 UploadId 作为请求参数。
请求信息
xxxxxxxxxx
51POST /bucket-7/1.txt?uploads HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: date
4Authorization: authorization string
5x-west-multi-length:1134000
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
x-west-multi-length | 是 | string | 上传文件的大小 |
Content-MD5 | 否 | string | 上传文件的 MD5 值,如果请求中文件太大计算 MD5 不方便,可以为空。使用时请勿在使用请求体上传文件 |
Content-Type | 否 | string | 文件类型,默认使用文件扩展名作为文件类型 |
x-amz-meta-x | 否 | string | 文件元数据 |
响应信息
该请求操作的实现仅使用了所有操作的公共响应头。有关详细信息,请查阅公共响应头
响应内容
参数 | 类型 | 说明 |
---|---|---|
InitiateMultipartUploadResult | Container | 上传文件的大小 |
Bucket | string | 空间名称 |
Key | string | 资源名称 |
UploadId | string | 初始化任务生成的ID。 上传分片 UploadPart API调用时用作请求参数 |
200
举例
xxxxxxxxxx
141POST /bucket-7/west.txt?uploads HTTP/1.1
2Host: fss-my.vhostgo.com
3X-Amz-Date: 20240301T022904Z
4Content-Type: text/plain
5Authorization: authorization string
6
7
8HTTP/1.1 200 OK
9<?xml version="1.0" encoding="UTF-8"?>
10<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
11 <Bucket>bucket-7</Bucket>
12 <Key>west.txt</Key>
13 <UploadId>e3868700-018b-41a3-8a9a-e093b7a22fc4</UploadId>
14</InitiateMultipartUploadResult>
分块上传数据,需指定的任务 UploadId
请求信息
xxxxxxxxxx
51PUT /bucket-7/west.txt?partNumber=PartNumber&uploadId=UploadId HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: date
4Content-Length: Size
5Authorization: authorization string
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
ObjectName | 是 | string | 初始化分片任务的对象 |
PartNumber | 是 | string | 上传的分块编号。介于1和10,000之间的正整数 |
UploadId | 是 | string | 上传任务ID。可从初始化任务接口响应信息中获取 |
响应信息
200
举例
xxxxxxxxxx
151PUT /bucket-7/west.txt?partNumber=1&uploadId=ZpbmcncyBteS1tb HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: Wed, 12 Oct 2023 17:50:00 GMT
4Content-Length: 10485760
5Content-MD5: pUNXr/BjKK5G2UKvaRRrOA==
6Authorization: authorization string
7
8data content
9
10HTTP/1.1 200 OK
11x-amz-request-id: 3141cdab-1387-4872-b6e7-e83ec0f9fc97
12Date: Wed, 12 Oct 2023 17:51:00 GMT
13ETag: "b54357faf0632cce46e942fa68356b38"
14Content-Length: 0
15Connection: keep-alive
请求信息
xxxxxxxxxx
131POST /bucket-7/west.txt?uploadId=UploadId HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: date
4Content-Length: Size
5Authorization: authorization string
6
7<CompleteMultipartUpload>
8 <Part>
9 <PartNumber>PartNumber</PartNumber>
10 <ETag>ETag</ETag>
11 </Part>
12 ...
13</CompleteMultipartUpload>
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
ObjectName | 是 | string | 资源名称 |
UploadId | 是 | string | 上传任务ID。可从初始化任务接口响应信息中获取 |
响应信息
200
状态码举例
xxxxxxxxxx
351POST /bucket-7/west.txt?uploadId=ZpbmcncyBteS1tb HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: Wed, 12 Oct 2023 17:50:00 GMT
4Content-Length: 10485760
5Authorization: authorization string
6
7
8<CompleteMultipartUpload>
9 <Part>
10 <PartNumber>1</PartNumber>
11 <ETag>"a54357aff0632cce46d942af68356b38"</ETag>
12 </Part>
13 <Part>
14 <PartNumber>2</PartNumber>
15 <ETag>"0c78aef83f66abc1fale8477f296d394"</ETag>
16 </Part>
17 <Part>
18 <PartNumber>3</PartNumber>
19 <ETag>"acbd18db4cc2f85cedef654fccc4a4d8"</ETag>
20 </Part>
21</CompleteMultipartUpload>
22
23
24HTTP/1.1 200 OK
25x-amz-request-id: 3141cdab-1387-4872-b6e7-e83ec0f9fc97
26Date: Wed, 12 Oct 2023 17:50:00 GMT
27Connection: close
28
29<?xml version="1.” encoding="UTF-8"?>
30<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
31 <Location>http://fss-my.vhostgo.com/bucket-7/west.txt</Location>
32 <Bucket>bucket-7</Bucket>
33 <Key>west.txt</Key>
34 <ETag>"3858f62230ac3c915f300c664312c11f-9"</ETag>
35</CompleteMultipartUploadResult>
同 bucket
下复制文件。它只能操作文件,不能操作文件夹。
请求信息
PUT /<bucket>/<save_as_file>
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
x-amz-copy-source | 是 | string | 源文件地址,格式 /<bucket>/<source-to-file> |
响应信息
200
状态码。举例
xxxxxxxxxx
151PUT /bucket-7/west.txt HTTP/1.1
2Host: fss-my.vhostgo.com
3Date: Wed, 12 Oct 2023 17:50:00 GMT
4x-amz-copy-source: /bucket-7/test/west.copy
5Authorization: authorization string
6
7HTTP/1.1 200 OK
8x-amz-request-id: 3141cdab-1337-4872-b6e7-e83ec0f9fc97
9Date: Wed, 28 Oct 2009 22:32:00 GMT
10Connection: close
11
12<CopyObjectResult>
13 <LastModified>2023-10-12T17:50:30.000Z</LastModified>
14 <ETag>"9b2cf535f27731c974343645a3985328"</ETag>
15</CopyObjectResult>
用于获取一个资源的元数据及对象数据,可以获取全部数据或者使用 Range 指定获取部分数据
请求信息
GET /<bucket>/<path_to_file>
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
Range | 否 | string | Range: byte=0-499表示第0-499字节范围的内容。Range: byte=-500表示最后500字节的内容。Range: byte=500-表示从第500字节开始到文件结束部分的内容。Range: byte=0-表示从第一个字节到最后一个字节,即完整的文件内容。 |
注
响应信息
200
,HTTP body 中返回文件内容。请求信息
DELETE /<bucket>/<path_to_file>
响应信息
200
。请求信息
HEAD /<bucket>/<path_to_file>
响应信息
200
,返回头信息如下所示: 响应头 | 说明 |
---|---|
Last-Modified | 最后修改时间 |
ETag | 资源内容的哈希值,用于表示对象内容的变化,而不是元数据的变化。ETag 的值并不总是对象数据的 MD5 值,具体取决于请求的方式 |
x-amz-meta-x | 文件元数据 |
请求信息
GET /<bucket>/<path_to_folder>/?list-type=2
分页参数
如果目录中文件数量过多,为了更友好的获取文件信息,可以分页获取:
参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
list-type | 是 | string | API 的第二版本要求使用该参数,并且值必须设置为 2 |
max-keys | 否 | string | 返回资源的最大数量。默认值为 1000 |
prefix | 否 | string | 指定前缀,只有资源名匹配该前缀的资源会被列出。默认值为空字符串 |
delimiter | 否 | string | 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。默认值为空字符串 |
该请求操作的实现仅使用了所有操作的公共请求头。有关详细信息,请查阅公共请求头
响应信息
该请求操作的实现仅使用了所有操作的公共响应头。有关详细信息,请查阅公共响应头
200
,列表格式为json,如下:响应内容
参数 | 类型 | 说明 |
---|---|---|
Delimiter | string | 指定目录分隔符 |
IsTruncated | Boolean | 返表示是否还有更多可返回的资源。当所有结果都已返回时,该参数设为false;当还有更多资源可返回时,该参数设为true。如果结果数量超过了MaxKeys指定的数量,可能不会返回所有结果 |
MaxKeys | string | 返回的资源的最大数量 |
Prefix | string | 以特定前缀开头的资源 |
ContinuationToken | string | 如果请求中带有 Continuation-token,它将包含在响应中 |
NextContinuationToken | string | 返如果响应被截断,S3 将返回此参数及其对应的续传令牌。您可以将该令牌作为 continuation-token 在下一个请求中指定,检索下一组资源 |
CommonPrefixes | string | 将合并为公共前缀的资源计为单个返回,并列出充当子目录的资源 |
ETag | string | 对象的 MD5 哈希值。ETag 仅反映对象内容的更改,而不包括其元数据的更改 |
Key | string | 资源名称 |
LastModified | DATE | 对象的最后修改日期和时间 |
Size | string | 对象的大小,以字节为单位 |
举例
261GET /?list-type=2 HTTP/1.1
2Host: bucket-7.fss-my.vhostgo.com
3X-Amz-Date: 20230628T063714Z
4Authorization: authorization string
5Content-Type: text/plain
6
7HTTP/1.1 200 OK
8<?xml version="1.0" encoding="UTF-8"?>
9<ListBucketResult xmlns="http://fss-my.vhostgo.com/doc/2006-03-01/">
10 <Name>bucket</Name>
11 <Prefix/>
12 <KeyCount>205</KeyCount>
13 <MaxKeys>1000</MaxKeys>
14 <IsTruncated>false</IsTruncated>
15 <Contents>
16 <Key>my-image.jpg</Key>
17 <LastModified>2022-10-12T17:50:30.0Z</LastModified>
18 <ETag>"fba9dede5f27731c9771645a39863328"</ETag>
19 <Size>434234</Size>
20 <StorageClass>STANDARD</StorageClass>
21 </Contents>
22 <Contents>
23 ...
24 </Contents>
25 ...
26</ListBucketResult>