快速开始
下面介绍如何在Browser.js SDK中快速使用OSS服务,包括上传文件、下载文件和查看文件列表等。
注意 云账号AccessKey拥有所有API访问权限,建议遵循阿里云安全最佳实践,在客户端不要使用会泄露配置的AK(AccessKeyId 和 AccessKeySecret),所以请使用STS方式(临时账号权限)给客户端授权。
STS场景说明:临时账号权限(STS)。
更多有关浏览器的使用请参考:浏览器应用
示例工程请参考:example
Bucket设置
从浏览器中直接访问OSS需要开通Bucket的CORS设置:
- 将allowed origins设置成
*
- 将allowed methods设置成
PUT, GET, POST, DELETE, HEAD
- 将allowed headers设置成
*
- 将expose headers设置成
etag
x-oss-request-id
注意 请将该条CORS规则设置成所有CORS规则的第一条。
使用SDK
目前浏览器中不能直接进行Bucket相关的操作,例如GetBucket (ListObjects)、GetBucketLogging、GetBucketReferer等。但是可以进行Object相关的操作,例如PutObject、GetObject等。
- 包含SDK
在html文件的
<head>
中包含如下标签:<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-x.x.x.min.js"></script>
想了解其他引入方式可参考安装介绍。
通过
new OSS
来创建client,创建后返回的是Promise,类似于callback的方式,在.then()
中处理返回的结果,在.catch()
中处理错误。 - 搭建STS Server 并从客户端获取临时授权信息
- 为账号开通STS服务,如果已开通可以跳过,开通STS请参见STS临时授权访问OSS,具体OSS授权Policy配置参见RAM和STS授权策略(Policy)配置
- 借助STS的SDK或API应用专属的STS签名服务。为了方便大家快速理解,OSS提供了多个语言版本的Demo程序供参考:
说明 Demo程序仅供STS功能实现参考。在具体的生产环境使用时,请自行开发鉴权等业务所需代码。
- 在前端(浏览器)向搭建的STS服务发起请求,获取STS临时授权信息。
<script type="text/javascript"> // OSS.urlib是sdk内部封装的发送请求的逻辑,开发者可以使用任何发送请求的库向`sts-server`发送请求 OSS.urllib.request("http://your_sts_server/", {method: 'GET'}, (err, response) => { if (err) { return alert(err); } try { result = JSON.parse(response); } catch (e) { errmsg = 'parse sts response info error: ' + e.message; return alert(errmsg); } // console.log(result) }) </script>
- 上传文件
下面使用
multipartUpload
接口来上传文件,multipartUpload
的使用请参考multipartUpload。<body> <input type="file" id="file" /> <script type="text/javascript"> document.getElementById('file').addEventListener('change', function (e) { let file = e.target.files[0]; let storeAs = 'upload-file'; console.log(file.name + ' => ' + storeAs); // OSS.urlib是sdk内部封装的发送请求的逻辑,开发者可以使用任何发送请求的库向`sts-server`发送请求 OSS.urllib.request("http://your_sts_server/", {method: 'GET'}, (err, response) => { if (err) { return alert(err); } try { result = JSON.parse(response); } catch (e) { return alert('parse sts response info error: ' + e.message); } let client = new OSS({ accessKeyId: result.AccessKeyId, accessKeySecret: result.AccessKeySecret, stsToken: result.SecurityToken, endpoint: '<oss endpoint>', bucket: '<Your bucket name>' }); //storeAs表示上传的object name , file表示上传的文件 client.multipartUpload(storeAs, file).then(function (result) { console.log(result); }).catch(function (err) { console.log(err); }); }); }); </script> </body>
- 下载文件
在浏览器中不能直接操作文件,因此采用签名URL的方式来生成文件的下载链接, 用户只需要单击链接即可下载文件。
<body> <input type="button" id="download" value="Download" /> <script type="text/javascript"> document.getElementById('download').addEventListener('click', function (e) { let objectKey = 'test/download_file'; let saveAs = 'download_file'; console.log(objectKey + ' => ' + saveAs); // OSS.urlib是sdk内部封装的发送请求的逻辑,开发者完全可以使用任何发请求的库向`sts-server`发送请求 OSS.urllib.request("http://your_sts_server/", {method: 'GET'}, (err, response) => { if (err) { return alert(err); } try { result = JSON.parse(response); } catch (e) { return alert('parse sts response info error: ' + e.message); } let client = new OSS({ accessKeyId: result.AccessKeyId, accessKeySecret: result.AccessKeySecret, stsToken: result.SecurityToken, endpoint: '<oss endpoint>', bucket: '<Your bucket name>' }); let result = client.signatureUrl(objectKey, { expires: 3600, response: { 'content-disposition': 'attachment; filename="' + saveAs + '"' } }); console.log(result); window.location = result; }); }); </script> </body>
- 查看文件列表
<script type="text/javascript"> OSS.urllib.request("http://your_sts_server/", {method: 'GET'}, (err, response) => { if (err) { return alert(err); } try { result = JSON.parse(response); } catch (e) { return alert('parse sts response info error: ' + e.message); } let client = new OSS({ accessKeyId: result.AccessKeyId, accessKeySecret: result.AccessKeySecret, stsToken: result.SecurityToken, endpoint: '<oss endpoint>', bucket: '<Your bucket name>' }); client.list({ 'max-keys': 10 }).then(function (result) { console.log(result); }).catch(function (err) { console.log(err); }); }); </script>
其中
region
参数是指您申请OSS服务时的区域,例如oss-cn-hangzhou
。完整的区域列表可以在OSS服务节点查看。在浏览器中打开html文件,然后打开Chrome的开发者控制台,即可查看列举文件的结果。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论