本文介绍如何使用iOS SDK完成上传、下载文件等基础操作。

背景信息

关于iOS SDK的更多信息,请参见如下示例:

您还可以直接git clone工程,并配置如下必要的参数,例如OSS_ACCESSKEY_IDOSS_SECRETKEY_ID等。

ios

运行工程demo如下:

fig_ios_phpnedemo

示例代码

以下演示了在iOS平台以及Mac平台上传和下载文件的流程。

  • iOS平台
    1. 需要添加的引用
      #import <AliyunOSSiOS/OSSService.h>                            
    2. 初始化OSSClient

      初始化OSSClient时需要完成Endpoint设置、鉴权方式设置和Client参数设置。其中鉴权方式包含明文设置模式、自签名模式以及STS鉴权模式。如果需要使用STS鉴权模式,请参见授权访问

      完善脚本文件中的AccessKeyId、SecretKeyId以及RoleArn参数信息。通过Python启动本机HTTP服务。在客户端代码中访问本地服务以获取StsToken.AccessKeyId、StsToken.SecretKeyId以及StsToken.SecurityToken。

      NSString *endpoint = @"https://oss-cn-hangzhou.aliyuncs.com";
      
      // 移动端建议使用STS方式初始化OSSClient。
      id<OSSCredentialProvider> credential = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * _Nullable{
      	OSSFederationToken *token = [OSSFederationToken new];
      	token.tAccessKey = @"AccessKeyId";
      	token.tSecretKey = @"AccessKeySecret";
      	token.tToken = @"SecurityToken";
      	token.expirationTimeInGMTFormat = @"Expiration";
      	return token;
      }];
      
      client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];              

      您可以通过OSSClient发起多线程的上传和下载请求,并发执行多个任务。

    3. 上传文件

      假设您在OSS控制台有已创建的Bucket。SDK的所有操作都会返回OSSTask,您可以为OSSTask设置延续动作,等待其异步完成,也可以通过调用waitUntilFinished阻塞等待其完成。

      OSSPutObjectRequest * put = [OSSPutObjectRequest new];
      put.bucketName = @"<bucketName>";
      //objectKey等同于objectName,表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
      put.objectKey = @"<objectKey>";
      // 直接上传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];
    4. 下载指定文件

      以下代码用于下载指定Object为NSData

      OSSGetObjectRequest * request = [OSSGetObjectRequest new];
      request.bucketName = @"<bucketName>";
      //objectKey等同于objectName,表示从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
      request.objectKey = @"<objectKey>";
      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];
  • MAC平台

    在MAC平台中,除引入方式不一样以外,其他操作示例与iOS平台一致。

    import <AliyunOSSOSX/AliyunOSSiOS.h>