您可以通过STS服务给其他用户颁发一个临时访问凭证。该用户可使用临时访问凭证在规定时间内访问您的OSS资源。临时访问凭证无需透露您的长期密钥,使您的OSS资源访问更加安全。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:PutObject"
],
"Resource": [
"acs:oss:*:*:examplebucket/exampledir",
"acs:oss:*:*:examplebucket/exampledir/*"
]
}
]
}
安装这个扩展
composer require alibabacloud/sdk
AlibabaCloud::accessKeyClient($config['secretId'], $config['secretKey'])
->regionId($config['region'])
->asDefaultClient();
$result = AlibabaCloud::rpc()
->product('Sts')
->scheme('https')
->version('2015-04-01')
->action('AssumeRole')
->method('POST')
->host('sts.aliyuncs.com')
->options([
'query' => [
'DurationSeconds'=>$config['durationSeconds'],//时长
'RoleArn'=>$config['roleArn'],//角色ARn
'RoleSessionName'=>$roleSessionName//访问名称自己定义
],
])
->request();
前端上传测试
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id="upload">上传</button>
<input id="file" type="file" />
<!-- 导入SDK文件 -->
<script
type="text/javascript"
src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"
></script>
<script type="text/javascript">
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
region: 'oss-cn-beijing',
// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
accessKeyId: 'STS.NSq7wNDckxWSEfWKZyZhWUtLC',
accessKeySecret: '6aT48NcdmRmovdstS9ajWNF7eYfAvWuYXCTZAFa8LpuK',
// 从STS服务获取的安全令牌(SecurityToken)。
stsToken: 'CAIS/wF1q6Ft5B2yfSjIr5DEfM36qbxKz5W4R0Dmr1osVud7urHnoTz2IHpFenFoCO4avvg/lGlW7/cTlr90UIRyWUvHYM1H7ZlG6jSob4/AvfvstRPXE3VJQTr9MQXy+eOPScebJYqvV5XAQlTAkTAJstmeXD6+XlujHISUgJp8FLo+VRW5ajw0b7U/ZHEVyqkgOGDWKOymPzPzn2PUFzAIgAdnjn5l4qnNqa/1qDim1QOmlbFI+9+pc8P9P5U3Ya0SCYnlgLZEEYPayzNV5hRw86N7sbdJ4z+vvKvGWQgPu03XbbaEro0/dVEgN/kgebRNqf/njuF1ofDDXHJYbfj0o4sagAGj2hHKFF62nXLH1eiNekTizIbLYME9qmkm7lKt+9O6sh33Lbi3qaAEPNe3HimE4tYcAiMIZBK3XZWAla7yv0LeYfIXnuT4Nslgq/nH7S78tpdSiOj2BFWMUmpseQop2FZg/FpaZwuAzPdfV1a2Me8PL0/SciBeRdkTI9s23+uAgw==',
bucket: 'xiaoshutest'
});
const upload = document.getElementById("upload");
const headers = {
// 指定该Object被下载时网页的缓存行为。
// 'Cache-Control': 'no-cache',
// 指定该Object被下载时的名称。
// 'Content-Disposition': 'oss_download.txt',
// 指定该Object被下载时的内容编码格式。
// 'Content-Encoding': 'UTF-8',
// 指定过期时间。
// 'Expires': 'Wed, 08 Jul 2022 16:57:01 GMT',
// 指定Object的存储类型。
// 'x-oss-storage-class': 'Standard',
// 指定Object的访问权限。
// 'x-oss-object-acl': 'private',
// 设置Object的标签,可同时设置多个标签。
// 'x-oss-tagging': 'Tag1=1&Tag2=2',
// 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true,表示禁止覆盖同名Object。
// 'x-oss-forbid-overwrite': 'true',
};
async function putObject () {
try {
const data = document.getElementById("file").files[0];
console.log(data);
console.log(222);
// 填写Object完整路径。Object完整路径中不能包含Bucket名称。
// 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
// data对象可以自定义为file对象、Blob数据或者OSS Buffer。
const result = await client.put(
"/exampleobject22.png",
data
//{headers}
);
console.log(result);
} catch (e) {
console.log(2);
console.log(e);
}
}
upload.addEventListener("click", () => {
putObject();
});
</script>
</body>
</html>
如果前端上传的时候又跨域的问题在这里设置
官方文档https://help.aliyun.com/document_detail/100624.html?spm=5176.8466032.help.dexternal.739f1450FwuC0e
本文由:xiaoshu168 作者:xiasohu611发表,转载请注明来源!