以下演示了上传、下载文件的基本流程。更多细节用法可以参考本工程的:
test资源:
点击查看
或者:
demo示例:
点击查看。
STEP-1. 初始化OSSClient
初始化主要完成Endpoint设置、鉴权方式设置、Client参数设置。其中,鉴权方式包含明文设置模式、自签名模式、STS鉴权模式。如果要使用STS鉴权请先阅读访问控制章节了解RAM的基础知识。以下内容假设您已开通RAM服务并了解RAM相关内容。了解如何获取子账户AccessKeyId,SecretKeyId以及RoleArn信息。
完善
脚本文件中AccessKeyId,SecretKeyId以及RoleArn参数信息。通过python可以启动一个本机http服务。在客户端代码中访问本地服务从而获得StsToken.AccessKeyId,StsToken.SecretKeyId以及StsToken.SecurityToken。
更多信息可查看sample中STS使用说明
点击查看。
- [backcolor=transparent]NSString[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]endpoint [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"https://oss-cn-hangzhou.aliyuncs.com"[backcolor=transparent];
- [backcolor=transparent]// 移动端建议使用STS方式初始化OSSClient。可以通过sample中STS使用说明了解更多(https://github.com/aliyun/aliyun-oss-ios-sdk/tree/master/DemoByOC)
- [backcolor=transparent]id[backcolor=transparent]<[backcolor=transparent]OSSCredentialProvider[backcolor=transparent]>[backcolor=transparent] credential [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[[backcolor=transparent]OSSStsTokenCredentialProvider[backcolor=transparent] alloc[backcolor=transparent]][backcolor=transparent] initWithAccessKeyId[backcolor=transparent]:@[backcolor=transparent]"AccessKeyId"[backcolor=transparent] secretKeyId[backcolor=transparent]:@[backcolor=transparent]"AccessKeySecret"[backcolor=transparent] securityToken[backcolor=transparent]:@[backcolor=transparent]"SecurityToken"[backcolor=transparent]];
- [backcolor=transparent]client [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[[backcolor=transparent]OSSClient[backcolor=transparent] alloc[backcolor=transparent]][backcolor=transparent] initWithEndpoint[backcolor=transparent]:[backcolor=transparent]endpoint credentialProvider[backcolor=transparent]:[backcolor=transparent]credential[backcolor=transparent]];
通过OSSClient发起上传、下载请求是线程安全的,您可以并发执行多个任务。
STEP-2. 上传文件
这里假设您已经在控制台上拥有自己的Bucket。SDK的所有操作,都会返回一个OSSTask,您可以为这个task设置一个延续动作,等待其异步完成,也可以通过调用waitUntilFinished阻塞等待其完成。
- [backcolor=transparent]OSSPutObjectRequest[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] put [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]OSSPutObjectRequest[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent]];
- [backcolor=transparent]put[backcolor=transparent].[backcolor=transparent]bucketName [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]@[backcolor=transparent]"<bucketName>"[backcolor=transparent];
- [backcolor=transparent]put[backcolor=transparent].[backcolor=transparent]objectKey [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]@[backcolor=transparent]"<objectKey>"[backcolor=transparent];
- [backcolor=transparent]put[backcolor=transparent].[backcolor=transparent]uploadingData [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]<[backcolor=transparent]NSData[backcolor=transparent] [backcolor=transparent]*>;[backcolor=transparent] [backcolor=transparent]// 直接上传NSData
- [backcolor=transparent]put[backcolor=transparent].[backcolor=transparent]uploadProgress [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]^([backcolor=transparent]int64_t[backcolor=transparent] bytesSent[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]int64_t[backcolor=transparent] totalByteSent[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]int64_t[backcolor=transparent] totalBytesExpectedToSend[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"%lld, %lld, %lld"[backcolor=transparent],[backcolor=transparent] bytesSent[backcolor=transparent],[backcolor=transparent] totalByteSent[backcolor=transparent],[backcolor=transparent] totalBytesExpectedToSend[backcolor=transparent]);
- [backcolor=transparent]};
- [backcolor=transparent]OSSTask[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] putTask [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]client putObject[backcolor=transparent]:[backcolor=transparent]put[backcolor=transparent]];
- [backcolor=transparent][[backcolor=transparent]putTask continueWithBlock[backcolor=transparent]:^[backcolor=transparent]id[backcolor=transparent]([backcolor=transparent]OSSTask[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]task[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent](![backcolor=transparent]task[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"upload object success!"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"upload object failed, error: %@"[backcolor=transparent] [backcolor=transparent],[backcolor=transparent] task[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]nil[backcolor=transparent];
- [backcolor=transparent]}];
- [backcolor=transparent]// 可以等待任务完成
- [backcolor=transparent]// [putTask waitUntilFinished];
STEP-3. 下载指定文件
下载一个指定object为NSData:
- [backcolor=transparent]OSSGetObjectRequest[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] request [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]OSSGetObjectRequest[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent]];
- [backcolor=transparent]request[backcolor=transparent].[backcolor=transparent]bucketName [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]@[backcolor=transparent]"<bucketName>"[backcolor=transparent];
- [backcolor=transparent]request[backcolor=transparent].[backcolor=transparent]objectKey [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]@[backcolor=transparent]"<objectKey>"[backcolor=transparent];
- [backcolor=transparent]request[backcolor=transparent].[backcolor=transparent]downloadProgress [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]^([backcolor=transparent]int64_t[backcolor=transparent] bytesWritten[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]int64_t[backcolor=transparent] totalBytesWritten[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]int64_t[backcolor=transparent] totalBytesExpectedToWrite[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"%lld, %lld, %lld"[backcolor=transparent],[backcolor=transparent] bytesWritten[backcolor=transparent],[backcolor=transparent] totalBytesWritten[backcolor=transparent],[backcolor=transparent] totalBytesExpectedToWrite[backcolor=transparent]);
- [backcolor=transparent]};
- [backcolor=transparent]OSSTask[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] getTask [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]client getObject[backcolor=transparent]:[backcolor=transparent]request[backcolor=transparent]];
- [backcolor=transparent][[backcolor=transparent]getTask continueWithBlock[backcolor=transparent]:^[backcolor=transparent]id[backcolor=transparent]([backcolor=transparent]OSSTask[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]task[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent](![backcolor=transparent]task[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"download object success!"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]OSSGetObjectResult[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] getResult [backcolor=transparent]=[backcolor=transparent] task[backcolor=transparent].[backcolor=transparent]result[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"download result: %@"[backcolor=transparent],[backcolor=transparent] getResult[backcolor=transparent].[backcolor=transparent]downloadedData[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]else[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]NSLog[backcolor=transparent](@[backcolor=transparent]"download object failed, error: %@"[backcolor=transparent] [backcolor=transparent],[backcolor=transparent]task[backcolor=transparent].[backcolor=transparent]error[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]nil[backcolor=transparent];
- [backcolor=transparent]}];
- [backcolor=transparent]// 如果需要阻塞等待任务完成
- [backcolor=transparent]// [task waitUntilFinished];