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

背景信息

有关iOS SDK详情,请参考如下示例:

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

ios

运行工程demo如下:

示例代码

以下演示了在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 = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"AccessKeyId" secretKeyId:@"AccessKeySecret" securityToken:@"SecurityToken"];
      
      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>