轻松搞定阿里OSS文件上传和图片下载
目录
1. 阿里云oss账号准备
1.1 注册阿里云账号,并开通OSS存储服务
1.2 创建RAM子用户并使用子账户的AccessKeyId和AccessKeySevcret进行业务操作,主账户存在安全问题
2. 项目中集成OSS依赖
3. 重写OSSFederationCredentialProvider从自家服务获取相关参数
4. OSSClient实例全局初始化
5. 封装和集成使用工具类,完成单文件上传,单文件断点续传、多文件上传等
6. OSSTokenServer 服务搭建(这个是模拟服务端产生token的,实际开发应该交给后台完成)
7. token获取支持HTTPS服务的优化和改进
1.2 创建RAM子用户并使用子账户的AccessKeyId和AccessKeySevcret进行业务操作,主账户存在安全问题
通过管理控制后台-访问控制 https://help.aliyun.com/product/28625.html
1.2.1 RAM控制台 https://ram.console.aliyun.com/
1.2.2 STS授权相关信息获取步骤:
-
1.2.2.1.RAM控制台用户管理创建子用户(User)同时点击该用户创建并获取AccessKeyID和AccessKeySecret https://help.aliyun.com/document_detail/28637.html
-
1.2.2.2.对该子用户(User) 授予AliyunSTSAssumeRoleAccess策略(必须),如需自定义策略请看 https://help.aliyun.com/document_detail/28640.html
-
1.2.2.3.RAM控制台角色管理创建角色role,进行自定义授权设置(控制操作的内容),获取Arn https://help.aliyun.com/document_detail/28649.html
-
注意点:
- 只有子用户(User)才能调用 AssumeRole 接口
- 阿里云主用户(Root User)的AccessKeys不能用于发起AssumeRole请求
2. 项目中集成OSS依赖
账号准备完成了,进入正题就是sdk的集成流程
module中添加依赖.配置完成后需同步一下
//阿里云OSS上传文件的SDK,上传内层依赖okhttp网络框架
compile 'com.aliyun.dpa:oss-android-sdk:+'
compile 'com.squareup.okhttp3:okhttp:3.11.0'
compile 'com.squareup.okio:okio:1.9.0'
proguard-rules.pro
文件配置混线代码
#阿里云文件服务sdk
-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
3. 重写OSSFederationCredentialProvider从自家服务获取相关参数
由于移动端被认为是不可信的,因而重要参数是不可以存放在移动端的,这时候需要出发自己的服务器获取 AccessKeyId,AccessKeySecret,SecurityToken,Expiration 几个重要参数
触发请求自家服务器索要授权(这里我们的思路是放在OSSAuthCredentialsProvider中进行的)
- 1, 发送自家网络请求,请求自家服务器索要授权
- 2, 成功返回拿到需要AccessKeyId、AccessKeySecret、SecurityToken、Expiration
- 3, 获取这些信息后,调用阿里SDK,构建OssClient上传即可
后端经返回如下代码
{
"StatusCode": "200",
"AccessKeyId": "STS.jp1jz2IHjp1jz2IH5Ef3jp1jz2IH5Ef3jp1jz2IH5Ef35Ef3",
"AccessKeySecret": "BeoXtPg1lXbtPg1lXbttPg1lXbtIqqjp1j",
"SecurityToken": "CAISkwJ1q6Ft5B22y2yyfSjIrok4uh5UUUQ7+EeP52yfSjIrokh5UytDWLIo/2yfSjIrok4uh5UdAIkq6NFHA