本文介绍如何使用iOS SDK完成上传、下载文件等基础操作。
背景信息
关于iOS SDK的更多信息,请参见如下示例:
您还可以直接git clone工程,并配置如下必要的参数,例如OSS_ACCESSKEY_ID、OSS_SECRETKEY_ID等。
运行工程demo如下:
示例代码
以下演示了在iOS平台以及Mac平台上传和下载文件的流程。
- 需要添加的引用
#import <AliyunOSSiOS/OSSService.h>
- 初始化OSSClient
初始化OSSClient时需要完成Endpoint设置、鉴权方式设置和Client参数设置。其中鉴权方式包含明文设置模式、自签名模式以及STS鉴权模式。如果需要使用STS鉴权模式,请参见授权访问。
完善脚本文件中的AccessKeyId、SecretKeyId以及RoleArn参数信息。通过Python启动本机HTTP服务。在客户端代码中访问本地服务以获取StsToken.AccessKeyId、StsToken.SecretKeyId以及StsToken.SecurityToken。
说明搭建STS服务的具体操作请参见开发指南中的使用STS临时访问凭证访问OSS。您可以通过调用STS服务的AssumeRole接口或者使用各语言STS SDK来获取临时访问凭证。临时访问凭证包括临时访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)。
NSString *endpoint = @"https://oss-cn-hangzhou.aliyuncs.com"; // 移动端建议使用STS方式初始化OSSClient。 id<OSSCredentialProvider> credential = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * _Nullable{ OSSFederationToken *token = [OSSFederationToken new]; // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。 token.tAccessKey = @"AccessKeyId"; token.tSecretKey = @"AccessKeySecret"; // 从STS服务获取的安全令牌(SecurityToken)。 token.tToken = @"SecurityToken"; // 临时访问凭证的过期时间。 token.expirationTimeInGMTFormat = @"Expiration"; return token; }]; client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
您可以通过OSSClient发起多线程的上传和下载请求,并发执行多个任务。
- 上传文件
如果在OSS控制台有已创建的Bucket。SDK的所有操作都会返回
OSSTask
,您可以为OSSTask
设置延续动作,等待其异步完成,也可以通过调用waitUntilFinished
阻塞等待其完成。OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // 填写Bucket名称,例如examplebucket。 put.bucketName = @"examplebucket"; // 填写Object完整路径。Object完整路径中不能包含Bucket名称,例如exampledir/testdir/exampleobject.txt。 put.objectKey = @"exampledir/testdir/exampleobject.txt"; // 直接上传NSData。 put.uploadingData = <NSData *>; put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend); }; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil; }]; // 等待任务完成。 // [putTask waitUntilFinished];
- 下载指定文件
以下代码用于下载指定Object为
NSData
。OSSGetObjectRequest * request = [OSSGetObjectRequest new]; // 填写Bucket名称,例如examplebucket。 request.bucketName = @"examplebucket"; // 填写Object完整路径。Object完整路径中不能包含Bucket名称,例如exampledir/testdir/exampleobject.txt。 request.objectKey = @"exampledir/testdir/exampleobject.txt"; request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); }; OSSTask * getTask = [client getObject:request]; [getTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"download object success!"); OSSGetObjectResult * getResult = task.result; NSLog(@"download result: %@", getResult.downloadedData); } else { NSLog(@"download object failed, error: %@" ,task.error); } return nil; }]; // 阻塞等待任务完成。 // [task waitUntilFinished];