阿里云对象存储服务OSS最佳实践DWord文档下载推荐.docx
- 文档编号:17942868
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:119
- 大小:2.45MB
阿里云对象存储服务OSS最佳实践DWord文档下载推荐.docx
《阿里云对象存储服务OSS最佳实践DWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《阿里云对象存储服务OSS最佳实践DWord文档下载推荐.docx(119页珍藏版)》请在冰豆网上搜索。
3.手机拿到这个Token后就可以将数据上传到OSS,或者从OSS下载数据了。
本教程的目的就是,介绍下述红色和蓝色框的内容
1.应用服务器如何生成这个Token,蓝色方框
2.Android/iOS应用如何取Token,红色方框
效果
本教程实现了一个APP,如下,大家可以扫描二维码,安装一下示例APP程序,这上工具是用Android开发。
但是本教程的应用服务器搭建也适用于iOS,即上述图蓝色的框的内容。
示例程序的体验
示例程序的最终效果图如下:
应用服务器:
该移动应用对应的后台应用服务器。
本教程搭建了一个后台应用服务器:
http:
//oss-
上传Bucket,指的是该移动应用要把数据上传到哪个Bucket区域:
指的第二步指定的Bucket对应的区域。
示例APP的使用
可以点击选择图片,然后就把文件上传到OSS,上传的方法,支持普通上传和断点上传。
注意在一些网络环境差的环境下,最好用断点上传。
然后可以利用图片处理服务,可以对将上传的图片进行缩略和加水印处理。
初始使用请暂时先不要改应用服务器地址和Bucket名字
搭建这样一个APP上传和下载的系统,需要准备的东西:
1.我必须开通了OSS,并且创建了Bucket,在这个例子里面的,对应的bucket是:
sdk-demo
2.我必须开通STS服务。
开通STS服务其实是为了如何生成上述所描述的Token
3.我必须搭建这样一个应用服务器。
这在个事例里面,我搭建的应用服务器的地址是:
//oss-.注意:
这个例子本教程是采用PHP编写的,但是事实上
,用户可以选择自己喜欢的语言进行编写,如Java、Python、Go、Ruby、Node.js、C#等编写。
为帐号开通STS服务
1.如果已经有bucket可以忽略这一步,如果没有bucket,创建Bucket参考官网
1.第二步操作,开通STS,可以参考如下:
(1)要开通STS服务,首先OSS登陆官网控制台
(2)登录管理控制台,点击:
安全令牌快捷配置
(3)会进入到令牌快捷配置页面,注意如果没有开通RAM,会弹出开通的对话框。
直接点开通,这个要求实名验证。
做完后跳到本页面。
点击开始授权
(4)点击开始授权后,系统会进行自动授权,请千万保存如下图框住的三个参数
点击保存AK信息后,对话框会关闭。
保存好下面标红的结果3.
保存这三个参数后。
到这一步,STS的开通已经完成了。
注意如果您之前已经点击这个页面创建了
AccessKeyId/AccessKeySecrte,弹出的页面如下:
点击如下图所示的查看
点击如下图所示的创建AccessKey
记下如下参数1,2
并记下如下参数3:
讲解一下应用服务器的搭建。
为了方便大家开发。
本教程准备了三个语言的版本示例程序(Java、PHP、Ruby)
应用服务器代码示例的下载
PHP:
下载地址Java:
下载地址
Ruby:
应用服务器示例的配置
{
"
AccessKeyID"
:
"
"
AccessKeySecret"
RoleArn"
TokenExpireTime"
900"
PolicyFile"
:
policy/all_policy.txt"
}
每个语言包下载下来后,都会有一个配置文件config.json如下例:
下面对配置进行讲解。
1.AccessKeyID填写上述图标红的1的内容,即用户自己在全
2.AccessKeySecret填写上述图片标红2的内容
3.RoleArn填写上述图标红3的内容
4.TokenExpireTime指Android/iOS应用取到这个Token的失效时间,注意,最少是900s,默认值可以不修改,
5.PolicyFile:
填写的是该该Token所要拥有的权限列表的文件,默认值可以不改本教程准备了三种最常用token权限文件,放于policy目录下面。
分别是all_policy.txt:
指定了该token拥有对该帐号下
创建Bucket、删除Bucket、上传文件、下载文件、删除文件的权限。
bucket_read_policy.txt:
指定了该token拥有该帐号下,对指定Bucket的权限。
bucket_read_write_policy.txt:
如果你想要指定这个Token只能对指定的bucket有读写权限,请把(bucket_read_policy.txt、bucket_read_write_policy.txt)这个文件里面$BUCKET_NAME直接替换成指定的bucket名字。
status"
200,"
AccessKeyId"
STS.3pYjsdgdgagdasdg"
rpnwO9kvEgetGdrddgsR2YrTtI"
Security"
CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙∂˙∂3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vK
goUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI="
Expiration"
2015-12-12T07:
49:
09Z"
返回的格式解析。
status:
表示获取Token的状态,获取成功时,返回值是200AccessKeyId:
表示Android/iOS应用初始化OSSClient获取的AccessKeyIdAccessKeySecret:
表示Android/iOS应用初始化OSSClient获取AccessKeySecretSecurityToken:
表示Android/iOS应用初始化的TokenExpiration:
表示该Token失效的时间。
主要在AndroidSDK会自动判断是否失效,自动获取Token注意上述这四个变量将构成了一个Token。
代码示例的运行方法
PHP运行的,将包下载后,然后修改好config.json这个文件。
直接运行phpsts.php即能生成Token,将程序部署到指定的地址。
对于PHP版本
对于JAVA版本(依赖于java1.7)
下载编译好的jar包,下载地址:
下载后解压:
运行方法:
java-jaross-token-server.jar(port)
如果不指定port(端口),直接运行java-jaross-token-server.jar,程序会监听7080端口如果想让程序执行在9000端口,运行java-jaross-token-server.jar9000,其他端口也类似。
体验自己的APP上传应用服务器
1.把把程序部署起来后,记下应用服务器地址如:
8080,将示例程序里面的应用服务器修改成上述地址
2.选择自己数据要上传到哪个bcuket及区域,修改示例APP程序里面相应Bucket及区域。
3.点击设置按钮,将配置加载。
4.选择图片,设置上传OSS文件名,上传。
然后就可以在Android上体验OSS服务了。
这样你就能通Android示例程序将数据直接上传到OSS了
5.上传成功后,可以看一下数据是否在OSS上了
核心代码解析-OSS初始化
下面讲解一下如何利用Android/iOSSDK跟自己的应用服务器,请求Token
-Android版本
//初始化一个OssService用来上传下
publicOssServiceinitOSS(Stringendpoint,Stringbucket,UIDisplayerdisplayer){OSSCredentialProvidercredentialProvider;
//使用自己的获取STSToken的类
//从应用服务器控件里面读取应用服务器地址
StringstsServer=((EditText)findViewById(R.id.stsserver)).getText().toString();
//STSGetter类,封装如何跟从应用服务器取数据,必须继承于OSSFederationCredentialProvider这个类。
取Token这个取决于你所写的APP跟应用服务器数据的协议设计。
if(stsServer.equals("
)){credentialProvider=newSTSGetter();
}else{
credentialProvider=newSTSGetter(stsServer);
//获取控件上的bucket名字
bucket=((EditText)findViewById(R.id.bucketname)).getText().toString();
//初始化OSSClient
ClientConfigurationconf=newClientConfiguration();
conf.setConnectionTimeout(15*1000);
//连接超时,默认15秒conf.setSocketTimeout(15*1000);
//socket超时,默认15秒conf.setMaxConcurrentRequest(5);
//最大并发请求书,默认5个conf.setMaxErrorRetry
(2);
//失败后最大重试次数,默认2次
OSSoss=newOSSClient(getApplicationContext(),endpoint,credentialProvider,conf);
returnnewOssService(oss,bucket,displayer);
-iOS版本
//初始化一个OSSClient实例
-(void)ossInit{
//构造一个获取STSToken的凭证提供器
id<
OSSCredentialProvider>
credential=[[OSSFederationCredentialProvideralloc]initWithFederationTokenGetter:
^OSSFederationToken*{
//实现一个函数,同步返回从server获取到的STSTokenreturn[selfgetFederationToken];
}];
//用endpoint、凭证提供器初始化一个OSSClient
client=[[OSSClientalloc]initWithEndpoint:
endPointcredentialProvider:
credential];
核心代码解析-移动应用从应用服务器取Token
具体APP从就应用服务器取Token方法,必须写到publicOSSFederationTokengetFederationToken(){}这个函数里面。
注意这个函数的逻辑依赖于可以自己设定,但是最终结果必须返回这样一个变量returnnewOSSFederationToken(ak,sk,token,expiration);
其中ak,sk,token,expiration必须是从应用服务器返回的Body获取的。
在本例子里,示例如下,注意用户可以自定义自己的移动应用跟自己应用服务器之前的协议。
publicOSSFederationTokengetFederationToken(){StringstsJson;
OkHttpClientclient=newOkHttpClient();
Requestrequest=newRequest.Builder().url(stsServer).build();
try{
Responseresponse=client.newCall(request).execute();
if(response.isSuccessful()){
stsJson=response.body().string();
}else{
thrownewIOException("
Unexpectedcode"
+response);
catch(IOExceptione){e.printStackTrace();
Log.e("
GetSTSTokenFail"
e.toString());
returnnull;
JSONObjectjsonObjs=newJSONObject(stsJson);
Stringak=jsonObjs.getString("
);
Stringsk=jsonObjs.getString("
Stringtoken=jsonObjs.getString("
SecurityToken"
Stringexpiration=jsonObjs.getString("
returnnewOSSFederationToken(ak,sk,token,expiration);
catch(JSONExceptione){Log.e("
e.printStackTrace();
returnnull;
}}
NSURL*url=[NSURLURLWithString:
STSServer];
NSURLRequest*request=[NSURLRequestrequestWithURL:
url];
OSSTaskCompletionSource*tcs=[OSSTaskCompletionSourcetaskCompletionSource];
NSURLSession*session=[NSURLSessionsharedSession];
NSURLSessionTask*sessionTask=[sessiondataTaskWithRequest:
request
completionHandler:
^(NSData*data,NSURLResponse*response,NSError*error){if(error){
[tcssetError:
error];
return;
[tcssetResult:
data];
[sessionTaskresume];
//实现这个回调需要同步返回Token,所以要waitUntilFinished[tcs.taskwaitUntilFinished];
if(tcs.task.error){
//如果网络请求出错,返回nil表示无法获取到Token。
该次请求OSS会失败。
returnnil;
//从网络请求返回的内容中解析JSON串拿到Token的各个字段,组成STSToken返回NSDictionary*object=[NSJSONSerializationJSONObjectWithData:
tcs.task.result
options:
kNilOptionserror:
nil];
OSSFederationToken*token=[OSSFederationTokennew];
nitoken.tAccessKey=[objectobjectForKey:
@"
];
token.tSecretKey=[objectobjectForKey:
token.tToken=[objectobjectForKey:
token.expirationTimeInGMTFormat=[objectobjectForKey:
returntoken;
OSS相关功能的代码,可以查看示例程序的实现
该Android示例程序的源码下载地址该iOS示例程序的源码下载地址
Java:
下载地址Ruby:
node.js:
搭建应用服务器之STSPolicy
上一篇文章中介绍了如何快速搭建应用服务器,在本文中会基于上文提到的应用服务器,以上海的Bucketapp-base-oss为例子,配置不同的Policy以实现不同的权限控制。
以下说明中假设你已经开通了STS,并完全阅读了上一篇文章。
以下提到的Policy都是上文提到的config.json中指定的Policy文件的内容。
以下讲述的获取STSToken后对OSS操作指的是应用服务器指定Policy,从STS获取临时凭证后,应用通过临时凭证访问OSS。
常见Policy
完全授权的Policy
Statement"
[
上文为了演示方便,默认Policy如下,表示的意思是允许应用对所有OSS的操作。
这对移动应用来说也是不安全的授权,不推荐。
Action"
oss:
*"
],
Effect"
Allow"
Resource"
["
acs:
*:
]
Version"
1"
获取STSToken后对OSS操作
结果
列出所有创建的Bucket
成功
上传不带前缀的Object,test.txt
下载不带前缀的Object,test.txt
上传带前缀的Object,user1/test.txt
下载带前缀的Object,user1/test.txt
列出Object,test.txt
带前缀的Object,user1/test.txt
只读不写的Policy
不限制前缀的只读不写Policy
这个Policy表示,应用可以对Bucketapp-base-oss下所有的Object可列举,可下载。
["
GetObject"
ListObjects"
app-base-oss/*"
app-base-oss"
失败
限制前缀的只读不写Policy
这个Policy表示,应用可以对Bucketapp-base-oss下带有前缀user1/的Object可列举,可下载。
但无法下载其他前缀的Object。
这样不同的应用如果对应不同的前缀,就可以达到在同一个bucket中空间隔离的效果。
app-base-oss/user1/*"
*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 阿里 对象 存储 服务 OSS 最佳 实践
