Este tópico descreve como usar o OSS SDK for iOS para fazer upload e baixe de objetos.
Pré-requisitos
Antes de começar, verifique se você:
Instalou o OSS SDK for iOS. Para mais informações, consulte Instalação (iOS SDK).
Projetos de demonstração
Os projetos de demonstração a seguir mostram como crie um bucket, fazer upload de um arquivo local e baixar um objeto:
Para execute um projeto de demonstração:
Clone os projetos de demonstração com o comando
git clone.-
Configure os parâmetros necessários:
Demonstração AliyunOSSSwift: defina os parâmetros em OSSSwiftGlobalDefines.swift.
Demonstração AliyunOSSSDK: defina os parâmetros em OSSTestMacros.h.
-
Inicie o Security Token Service (STS):
Execute o script de autenticação no diretório
sts_local_serverpara iniciar o servidor de autenticação STS local. Em seguida, defina os parâmetrosAccessKeyId,AccessKeySecreteRoleArn.Inicie o serviço HTTP local com httpserver.py. O cliente obtém os valores
StsToken.AccessKeyId,StsToken.SecretKeyeStsToken.SecurityTokendesse serviço HTTP local.
Após iniciar a demonstração iOS, o aplicativo oferece pontos de entrada para seleção de imagem (Select), uploads com assinatura personalizada (CustomSign), uploads (Put), downloads (Get), recuperação de miniaturas (GetResizeImage), marca d'água de texto (Watermark) e callbacks de upload (triggerCallback).
Código de exemplo
As etapas a seguir mostram como fazer upload e baixe de objetos no iOS e macOS.
-
Importe o pacote do OSS.
Importe o arquivo de cabeçalho necessário antes de chamar qualquer API do OSS:
#import <AliyunOSSiOS/OSSService.h>
-
Inicialize uma instância do OSSClient.
-
Escolha um modo de autenticação.
O OSS SDK for iOS oferece três modos de autenticação: texto simples, autoassinado e STS. Em aplicativos móveis, use a autenticação STS. Esse método emite credenciais de curta duração que limitam a exposição caso uma chave seja comprometida e permitem rotação sem atualize o aplicativo. Inserir um AccessKey ID e um AccessKey secret diretamente no binário do aplicativo expõe sua conta se houver engenharia reversa e impede a rotação de credenciais sem uma nova versão.
Para mais informações, consulte Modo de autenticação STS.
-
Obtenha as credenciais:
Modo de texto simples: autentique-se usando seu AccessKey ID e AccessKey secret diretamente.
Modo autoassinado: gere uma string de assinatura para autenticação. Para mais informações, consulte Modo autoassinado.
Modo de autenticação STS: use credenciais de acesso temporárias emitidas pelo Security Token Service (STS). Chame a API AssumeRole ou utilize os SDKs do STS para obter credenciais temporárias. Para detalhes, consulte Acessar o OSS usando credenciais temporárias do STS.
Use as credenciais para inicializar o OSS SDK for iOS.
-
-
O código a seguir inicializa uma instância do OSSClient para todo o ciclo de vida do aplicativo. O
OSSAuthCredentialProvideratualize automaticamente as credenciais STS do servidor quando elas expiram.@interface AppDelegate () @property (nonatomic, strong) OSSClient *client; @end /** * The URL to obtain STS information. Configure this on your own server. */ #define OSS_STS_URL @"oss_sts_url" /** * The endpoint of the region where the bucket is located. */ #define OSS_ENDPOINT @"your bucket's endpoint" /** * The region where the bucket is located. */ #define OSS_REGION @"your bucket's region" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Initialize the OSSClient instance. [self setupOSSClient]; return YES; } - (void)setupOSSClient { // Initialize a provider that automatically refreshes credentials. id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STS_URL]; // Client-side configurations, such as timeout period and DNS pre-resolution. OSSClientConfiguration *cfg = [[OSSClientConfiguration alloc] init]; cfg.signVersion = OSSSignVersionV4; client = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credentialProvider clientConfiguration:cfg]; client.region = OSS_REGION; }NotaSe o aplicativo usar um único bucket em uma região, defina o ciclo de vida do OSSClient para corresponder ao ciclo de vida do aplicativo. Consulte Regiões e Endpoints.
-
-
Crie um bucket.
O código a seguir cria um bucket chamado
examplebucket:// Build a request to create a bucket. OSSCreateBucketRequest * create = [OSSCreateBucketRequest new]; // Set the bucket name to examplebucket. create.bucketName = @"examplebucket"; // Set the access control list (ACL) to private. create.xOssACL = @"private"; // Set the storage class to Infrequent Access (IA). create.storageClass = OSSBucketStorageClassIA; OSSTask * createTask = [client createBucket:create]; [createTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"create bucket success!"); } else { NSLog(@"create bucket failed, error: %@", task.error); } return nil; }]; // Wait for the task to complete synchronously. // [createTask waitUntilFinished];NotaTodas as operações do SDK retornam um objeto
OSSTask. Defina um bloco de continuação em umOSSTaskpara processar o resultado de forma assíncrona ou chamewaitUntilFinishedpara bloquear até que a tarefa seja concluída. -
Faça upload de um arquivo local.
O código a seguir faz upload de um arquivo local para o OSS:
Parâmetro
Descrição
bucketNameNome do bucket de destino. Exemplo:
examplebucket.objectKeyCaminho completo do objeto, excluindo o nome do bucket. Exemplo:
exampledir/testdir/exampleobject.txt.uploadingFileURLCaminho do arquivo local como um
NSURL.uploadingDataAlternativa ao
uploadingFileURL: passeNSDatadiretamente.uploadProgressBloco de callback que reporta bytes enviados, total de bytes enviados e total de bytes esperados.
OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // Specify the bucket name. Example: examplebucket. put.bucketName = @"examplebucket"; // Specify the full path of the object. Do not include the bucket name. Example: exampledir/testdir/exampleobject.txt. put.objectKey = @"exampledir/testdir/exampleobject.txt"; put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"]; // Alternatively, upload NSData directly. // 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; }]; // Wait for the task to complete. // [putTask waitUntilFinished]; -
Baixe um objeto.
O código a seguir baixa um objeto para o dispositivo local:
Parâmetro
Descrição
bucketNameNome do bucket que contém o objeto. Exemplo:
examplebucket.objectKeyCaminho completo do objeto, excluindo o nome do bucket. Exemplo:
exampledir/testdir/exampleobject.txt.downloadProgressBloco de callback que reporta bytes gravados, total de bytes gravados e total de bytes esperados.
OSSGetObjectRequest * request = [OSSGetObjectRequest new]; // Specify the bucket name. Example: examplebucket. request.bucketName = @"examplebucket"; // Specify the full path of the object. Do not include the bucket name. Example: 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; }]; // Wait for the task to complete. // [task waitUntilFinished];