获取对象列表
功能说明
您可以使用 listObjects 接口列举对象,以下代码展示如何简单列举对象。
代码示例
var params = {
Bucket: "<your-bucket-name>",
};
s3Client.listObjects(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
MaxKeys | Int | 设置响应中返回的最大键数。默认值和可设置最大值均为1000 | 否 |
Prefix | String | 指定列出对象的键名需要包含的前缀 | 否 |
Marker | String | 用于在某一个具体的键名后列出对象,可指定存储桶中的任一个键名 | 否 |
返回结果
listObjects 中可设置的列举相关参数如下:
参数 | 描述 |
---|---|
Bucket | 包含对象的存储桶的名称 |
Delimiter | 分隔符是用于对对象 objectKey 进行分组的字符。所有名字包含指定的prefix(可以不指定)且第一次出现 delimiter 字符之间的对象作为一组返回对象 |
Marker | 指定列出存储桶中的对象时以其开头的键 |
MaxKeys | 设置响应中返回的最大键数。 默认情况下,该操作最多返回1,000个键名 |
Prefix | 将响应限制为以指定前缀开头的键 |
上传对象
功能说明
您可以使用 putObject 接口上传对象,可以上传最大不超过5GB的文件,超过5GB的文件可以通过分片上传操作上传到媒体存储服务,对象key的命名使用UTF-8编码,长度必须在1~1023字节之间,不能反斜线(\)开头,以下代码展示如何上传一个对象。
代码示例
简单文本上传:
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
Body: 'STRING_VALUE',
ACL: "private", // 初始化acl权限,默认为private,"private"|"public-read"|"public-read-write"
ContentType: "text/plain", // 设置contentType, 默认是application/octet-stream
};
s3Client.putObject(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
文件上传,指定待上传的文件File对象,例如在HTML页面中使用类型为“file”的input标签:<input type="file" id="input-file"/>。
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
Body: document.getElementById('input-file').files[0],
ACL: "private", // 初始化acl权限,默认为private,"private"|"public-read"|"public-read-write"
ContentType: "text/plain", // 设置contentType, 默认是application/octet-stream
};
s3Client.putObject(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名称 | 是 |
Body | String | 上传的对象数据流 | 是 |
ACL | String | 对象访问控制权限 | 否 |
ContentType | String | 对象类型 | 是 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
ETag | String | 上传对象后对应的Entity Tag |
下载对象
功能说明
您可以使用 getObject 接口下载对象,以下代码展示如何下载一个对象。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.getObject(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名称 | 是 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
Body | Array | 对象数据内容字节数组 |
ContentLength | Int | 对象数据的长度,单位为字节 |
ContentType | String | 数据的标准MIME类型 |
Metadata | Object | 自定义元数据 |
ETag | String | 对象的Entity Tag |
LastModified | Time | 最后修改对象的时。 |
StorageClass | String | 对象的存储类型 |
复制对象
功能说明
您可以使用 copyObject 接口复制对象,您需要设置复制的对象名,所在的桶以及目标桶和对象名。
代码示例
var params = {
Bucket: "<dst-bucket-name>",
Key: "<dst-bucket-name>",
CopySource: "<source-bucket-name>" + "/" + "<source-object-key>" // 必须加上桶名前缀,
};
s3Client.copyObject(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
注意事项:对象key会放到请求头header来发送,如果其中包含中文的话会出现编码格式问题,解决方法是可以将header中的中文字符进行URL编码。
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 目的桶名称 | 是 |
Key | String | 目的桶的对象key | 是 |
CopySource | String | 源对象地址(bucket+key) | 是 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
CopyObjectResult | Object | 包含拷贝生成对象的Entity Tag和最后修改时间等信息 |
删除对象
功能说明
您可以使用 deleteObject 接口删除单个对象,以下代码展示如何删除一个对象。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.deleteObject(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名称 | 是 |
返回结果
根据返回码判断是否操作成功。
批量删除对象
功能说明
您可以使用 deleteObjects 接口批量删除多个对象,代码示例如下。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Delete: {
Objects: [
{
'Key': 'ExampleObject.txt',
},
{
'Key': 'ExampleObject1.txt',
},
]
},
};
s3Client.deleteObjects(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success");
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Delete | Delete | 要删除的对象key列表 | 是 |
返回结果
根据返回码判断是否操作成功。
获取对象元数据
功能说明
您可以使用 headObject 接口获取对象元数据。headObject 操作的请求参数与 getObject 类似,但是 headObject 返回的http响应中没有对象数据。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.headObject(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success: ", data.ContentType);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象key | 是 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
AcceptRanges | String | 跨域访问规则 |
LastModified | Date | 最后修改时间 |
ContentLength | Long | 对象大小 |
ETag | String | 资源标识符 |
ContentType | String | 对象类型 |
Metadata | Object | 对象元数据 |
StorageClass | String | 对象存储类型 |
设置对象访问权限
功能说明
与桶访问权限类似,对象访问权限设置方式具有 Canned ACL与 AccessControlPolicy两种。需要注意的是,对象的访问优先级要高于桶访问权限。比如桶访问权限是 private,但是对象访问权限是 public read,则所有用户都可以访问该对象。默认情况下,只有对象的拥有者才能访问该对象,即对象的访问权限默认是 private。
代码示例
使用canned ACL设置桶的访问权限,对象访问权限包含了:private(私有读写),public-read(公共读私有写),public-read-write(公共读写),示例代码如下:
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
ACL: "public-read-write",
};
s3Client.putObjectAcl(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
使用ACL对象授予权限,指定显式访问权限和被授权用户 。这些参数映射到s3Client在ACL中支持的权限集。使用 AccessControlList 设置桶访问权限时,可以设置特定用户对桶的访问权限:
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
AccessControlPolicy: {
Grants: [
{
Grantee: {
Type: "CanonicalUser",
ID: "<grantee-canonical-id>"
},
Permission: "FULL_CONTROL"
},
],
Owner: {
ID: "<owner-canonical-id>",
}
}
};
s3Client.putObjectAcl(params, function (err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
请求参数
预定义的ACL
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名称 | 是 |
ACL | String | 桶访问权限,参考上面的Canned ACL | 是 |
每个Canned ACL都有一组预定义的被授权者和权限,下表列出了相关的预定义授权含义:
ACL | 权限 | 描述 |
---|---|---|
private | 私有读写 | 对象拥有者有读写权限,其他用户没有访问权限 |
public-read | 公共读私有写 | 对象拥有者有读写权限,其他用户只有该对象的读权限 |
public-read-write | 公共读写 | 所有用户都有该对象的读写权限 |
指定显式访问权限和被授权用户AccessControlPolicy
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名称 | 是 |
AccessControlPolicy | Object | 访问权限和被授权用户对象 | 是 |
关于AccessControlPolicy的说明:
Owner参数用来指定桶的所有者信息,Grants参数用来指定被授权的用户信息。其中和权限有关的参数是Permission,您可以选择 FULL_CONTROL | READ | WRITE | READ_ACP | WRITE_ACP 来设定相应的权限。
返回结果
根据返回码判断是否操作成功。
获取对象访问权限
功能说明
您可以使用 getObjectAcl 接口获取对象访问的权限。以下代码展示如何获取对象的访问权限。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.getObjectAcl(params, function (err, data) {
if (err)
console.log(err, err.stack);
else
console.log(data);
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象名 | 是 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
Owner | Object | 对象的owner信息 |
Grants | Object | grants 授权信息,包含了每个用户与其权限Permission |
获取对象标签
功能说明
您可以使用getObjectTagging接口获取对象标签。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.getObjectTagging(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data.TagSet[0]);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象key | 是 |
VersionId | String | 设置标签信息的对象的版本Id | 否 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
TagSet | Array | 设置的标签信息,包含了一个Tag结构体的数组,每个Tag以Key-Value的形式说明了标签的内容 |
删除对象标签
功能说明
您可以使用deleteObjectTagging接口删除对象标签。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
};
s3Client.deleteObjectTagging(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 执行本操作的桶名称 | 是 |
Key | String | 设置标签信息的对象key | 是 |
VersionId | String | 设置标签信息的对象的版本Id | 否 |
返回结果
根据返回码判断是否操作成功。
设置对象标签
功能说明
您可以使用putObjectTagging接口为对象设置标签。标签是一个键值对,每个对象最多可以有10个标签。bucket的拥有者默认拥有给bucket中的对象设置标签的权限,并且可以将权限授予其他用户。每次执行PutObjectTagging操作会覆盖对象已有的标签信息。每个对象最多可以设置10个标签,标签Key和Value区分大小写,并且Key不可重复。每个标签的Key长度不超过128字节,Value长度不超过256字节。SDK通过HTTP header的方式设置标签且标签中包含任意字符时,需要对标签的Key和Value做URL编码。设置对象标签信息不会更新对象的最新更改时间。
代码示例
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
Tagging: {
TagSet: [
{
Key: 'key1',
Value: 'value1'
},
]
}
};
s3Client.putObjectTagging(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 对象key | 是 |
Tagging | Object | 设置的标签信息,包含了一个Tag结构体的数组,每个Tag以Key-Value的形式说明了标签的内容 | 是 |
VersionId | String | 设置标签信息的对象的版本Id | 否 |
返回结果
根据返回码判断是否操作成功。
生成下载预签名URL
功能说明
getSignedUrl接口为一个指定对象生成一个预签名的下载链接,访问该链接可以直接下载该对象。
代码示例
生成预签名下载链接
generateGetObjectSignedUrl: function (fileName, callback) {
console.log("生成用于下载的预签名URL");
let params = {
Bucket: this.bucket,
Key: fileName,
Expires: 900,
};
this.s3Client.getSignedUrl("getObject", params, function(err, url) {
if (err) {
console.error("生成URL时出错: ", err);
} else {
console.log("预签名URL: ", url);
callback(url);
}
});
}
生成下载对象的预签名URL后,可以直接通过该URL请求下载文件
getObjUsingPresignedUrl: function (presignedUrl) {
console.log("开始下载文件...");
fetch(presignedUrl, {
method: 'GET',
})
.then(response => {
if (response.ok) {
return response.blob();
} else {
throw new Error(`下载失败,状态码: ${response.status}`);
}
})
.then(blob => {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = "downloadedFile";
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
console.log("文件下载成功");
})
.catch(error => {
console.error("下载出错: ", error);
});
}
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | bucket的名称 | 是 |
Key | String | 对象的key | 是 |
Expires | Int | 超时时间(秒) | 否,默认900秒 |
返回结果
生成对应的预签名下载 URL,该链接允许用户在指定的时间内直接从媒体存储下载对象。
生成上传预签名URL
功能说明
getSignedUrl接口为一个指定对象生成一个预签名的上传链接,访问该链接可以直接上传对象到指定的媒体存储存储桶。
代码示例
生成预签名上传链接
generatePutObjectSignedUrl: function (fileName, callback) {
console.log("生成用于上传对象的预签名URL");
let params = {
Bucket: this.bucket,
Key: fileName,
Expires: 900,
ContentType: "image/png",
};
this.s3Client.getSignedUrl("putObject", params, function(err, url) {
if (err) {
console.error("生成URL时出错: ", err);
} else {
console.log("预签名URL: ", url);
callback(url);
}
});
}
生成上传对象的预签名URL后,可以直接通过该URL将文件上传至媒体存储。
putObjUsingPresignedUrl: function (presignedUrl, file) {
console.log("开始上传文件...");
fetch(presignedUrl, {
method: 'PUT',
headers: {
'Content-Type': 'image/png' // 需要跟生成预签名URL时指定的ContentType一致
},
body: file
})
.then(response => {
if (response.ok) {
console.log("文件上传成功");
} else {
console.error("上传失败,状态码: ", response.status);
}
})
.catch(error => {
console.error("上传出错: ", error);
});
}
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | bucket的名称 | 是 |
Key | String | 对象的key | 是 |
Expires | Int | 超时时间(秒) | 否,默认900秒 |
ContentType | String | 对象的ContentType | 否。若生成预签名URL时指定了,则通过预签名链接上传时也需要指定为相同的ContentType |
返回结果
生成对应的预签名上传 URL,该链接允许用户在指定的时间内直接将对象上传到媒体存储存储桶。
服务端加密
功能说明
上传对象时可以指定对象的加密算法,即使设置桶的加密配置也可以加密请求上传的对象数据,服务端根据指定的加密算法对对象数据进行加密,目前支持AES256和国密SM4加密算法。
代码示例
上传对象,并开启服务端加密:
//上传文件
var params = {
Bucket: "<your-bucket-name>",
Key: "<your-key-name>",
Body: "<your-key-body>",
ServerSideEncryption: "AES256"
};
s3Client.putObject(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
Key | String | 上传对象名 | 是 |
Body | String | 上传对象流 | 是 |
ServerSideEncryption | String | 服务端加密算法 | 是 |
返回结果
根据返回码判断是否操作成功。
获取多版本对象列表
功能说明
如果桶开启了版本控制,您可以使用 listObjectVersions接口列举对象的版本,每次list操作最多返回1000个分片上传事件,简单列举对象版本代码如下。
代码示例
var params = {
Bucket: "<your-bucket-name>",
};
s3Client.listObjectVersions(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
请求参数
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | String | 桶名称 | 是 |
MaxKeys | Int | 设置响应中返回的最大键数。默认值和可设置最大值均为1000 | 否 |
Prefix | String | 指定列出对象的键名需要包含的前缀 | 否 |
Marker | String | 用于在某一个具体的键名后列出对象,可指定存储桶中的任一个键名 | 否 |
返回结果
参数 | 类型 | 说明 |
---|---|---|
IsTruncated | Boolean | 分页判断,指明是否已返回所有结果 |
KeyMarker | String | 设定结果从KeyMarker之后按字母序开始返回,与VersionIdMarker组合使用 |
VersionIdMarker | String | 设定结果从KeyMarker对象的VersionIdMarker之后按新旧版本排序开始返回 |
Versions | Array | 保存除删除标记以外的对象多版本的数组 |
DeleteMarkers | Array | 保存删除标记的对象数组 |
Name | String | 桶名 |
Prefix | String | 本次查询结果的前缀 |
MaxKeys | String | 限定此次返回对象的最大个数 |
CommonPrefixes | Array | 公共前缀 |