Todos os produtos
Search
Central de documentação

Object Storage Service:Set up a direct upload service for mobile applications

Última atualização: Sep 12, 2026

Este tópico descreve como usar o Security Token Service (STS) para configurar um service de upload direto de dados para aplicativos móveis em menos de 30 minutos. Esse service permite que seu aplicativo móvel faça upload e download de dados diretamente no OSS, enquanto o servidor de aplicativos gerencia apenas as informações de controle, garantindo uma transferência de dados eficiente e segura.

Por que usar um service de upload direto

Na era da Internet móvel, o volume de dados enviados por aplicativos móveis cresce constantemente. Como desenvolvedor, use o OSS para atender a diversas necessidades de armazenamento e concentre-se na lógica do seu aplicativo. O service de upload direto para aplicativos móveis baseado no OSS oferece os seguintes benefícios:

  • Segurança dos dados: usa gerenciamento flexível de permissões para uploads e downloads, assegurando maior proteção.

  • Custo-benefício: elimina a necessidade de provisionar muitos servidores. Os aplicativos móveis conectam-se diretamente ao OSS, e apenas os fluxos de controle passam pelos servidores de aplicativos.

  • Alta concorrência: suporta facilmente acessos simultâneos elevados, garantindo boa experiência ao usuário.

  • Dimensionamento elástico: o espaço de armazenamento escala sob demanda para acompanhar o crescimento do negócio.

  • Processamento de dados: integra-se perfeitamente ao processamento de imagens e à transcodificação de áudio e vídeo, proporcionando maior flexibilidade no tratamento de dados.

Pré-requisitos

Como funciona o upload direto para aplicativos móveis

image

As etapas a seguir descrevem o processo:

  1. O aplicativo móvel solicita credenciais de acesso temporárias ao servidor de aplicativos.

    Nota

    Aplicativos Android e iOS não podem armazenar pares AccessKey diretamente, pois isso pode causar vazamento de dados. Portanto, os aplicativos devem solicitar um token STS ao servidor de aplicativos. Os tokens STS possuem tempo limitado. Se o tempo de expiração de um token STS for de 30 minutos (conforme especificado pelo servidor de aplicativos), o aplicativo Android ou iOS poderá usar esse token para fazer upload e download de dados no OSS durante esse período. Após a expiração do token, o aplicativo precisará obter um novo token STS.

  2. O servidor de aplicativos chama a operação AssumeRole usando o sdk do STS para obter credenciais de acesso temporárias.

  3. O STS gera e retorna credenciais de acesso temporárias ao servidor de aplicativos.

  4. O servidor de aplicativos devolve as credenciais de acesso temporárias ao cliente.

  5. O aplicativo móvel utiliza o sdk do OSS para enviar arquivos ao OSS usando as credenciais de acesso temporárias.

  6. O OSS retorna uma resposta de sucesso ao cliente.

Procedimento

Etapa 1: Ativar o STS e configurar o servidor de aplicativos

1. Criar um usuário RAM no RAM

Primeiramente, crie um usuário RAM e obtenha o par AccessKey correspondente para servir como credencial de identidade de longo prazo para o aplicativo no servidor.

  1. Faça login no console do RAM usando sua conta Alibaba Cloud ou como administrador de conta.

  2. No painel de navegação à esquerda, escolha Identity Management > Users.

  3. Clique em Create User.

  4. Insira um Logon Name e um Display Name.

  5. Na seção Access Mode, selecione Use Permanent AccessKey e clique em OK.

Importante

O AccessKey Secret de um usuário RAM é exibido apenas no momento da criação e não pode ser visualizado posteriormente. Guarde-o em local seguro.

  1. Clique em Copy abaixo de Actions para salvar o par AccessKey (AccessKey ID e AccessKey Secret).

2. Conceder ao usuário RAM permissão para chamar a operação AssumeRole

Após criar um usuário RAM, conceda a ele permissão para chamar a operação AssumeRole do STS, permitindo que assuma uma função RAM e obtenha credenciais temporárias.

  1. No painel de navegação à esquerda, escolha Identity Management > Users.

  2. Na página Users, localize o usuário RAM desejado e clique em Grant Permissions no lado direito do usuário.

  3. Na página Grant Permission, selecione a política de sistema AliyunSTSAssumeRoleAccess.

    Nota

    A política AliyunSTSAssumeRoleAccess é uma permissão fixa necessária para chamar a operação AssumeRole. Essa política não está relacionada às permissões necessárias para obter credenciais temporárias ou iniciar solicitações ao OSS usando essas credenciais.

    Defina o escopo do recurso como Account Level e clique em Confirm New Authorization.

  4. Clique em OK.

3. Criar uma função RAM no RAM

Crie uma função RAM para a conta Alibaba Cloud atual e obtenha o ARN of the role (Alibaba Cloud Resource Name) para que o usuário RAM possa assumi-la posteriormente.

  1. No painel de navegação à esquerda, escolha Identity Management > Roles.

  2. Clique em Create Role e defina o tipo de entidade confiável como Cloud Account.

  3. Selecione a conta Alibaba Cloud atual e clique em OK.

  4. Insira o nome da função e clique em OK.

  5. Na página de gerenciamento de funções RAM, clique em Copy para salvar o ARN da função.

O ARN da função segue o formato acs:ram::<accountId>:role/oss-web-upload, onde accountId é o ID da conta Alibaba Cloud atual.

4. Criar uma política de permissões para upload de arquivos no RAM

Com base no princípio do menor privilégio, crie uma política de permissões personalizada para a função RAM, restringindo os uploads apenas ao bucket do OSS especificado.

  1. No painel de navegação à esquerda, escolha Permissions > Policies.

  2. Clique em Create Policy.

  3. Na página Create Policy, clique em JSON Editor e substitua <Bucket name> no script abaixo pelo nome do bucket web-direct-upload criado nos pré-requisitos.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:PutObject",
          "Resource": "acs:oss:*:*:<Bucket name>/*"
        }
      ]
    }
  4. Após configurar a política, clique em Next to edit policy information.

  5. Na seção Basic Information, insira o nome da política e clique em OK.

5. Conceder permissões à função RAM no RAM

Conceda as permissões personalizadas à função RAM para que ela obtenha os acessos necessários quando for assumida.

  1. No painel de navegação à esquerda, escolha Identity Management > RAM Role.

  2. Na página RAM Role, localize a função RAM desejada e clique em Grant Permission no lado direito da função.

  3. Na página Grant Permission, selecione Custom Policy e escolha a política personalizada criada anteriormente.

    Defina Resource Scope como Account Level e selecione Custom Policy na lista suspensa de tipos de política para filtrar.

  4. Clique em OK.

6. Criar uma instância ECS como servidor de aplicativos

Crie uma instância ECS para atuar como servidor de aplicativos e gerar credenciais temporárias.

Nota

Em uma implantação real, você pode integrar a API do STS ao seu próprio servidor de aplicativos sem precisar criar esta instância ECS.

Parâmetro

Valor de exemplo

Método de faturamento

Pay-as-you-go

Região

China (Hangzhou)

IP público

Atribuir um endereço IPv4 público

Grupo de segurança

Liberar porta HTTP (TCP: 80)

Para etapas detalhadas, consulte Purchase a Linux instance and set up a WordPress website from the console.

7. Obter credenciais temporárias no servidor de aplicativos

Em uma aplicação web, integre o STS SDK ao servidor de aplicativos para implementar uma API de obtenção de credenciais STS temporárias. Quando essa API (/get_sts_token) for acessada via método HTTP GET, ela gerará credenciais temporárias e as retornará ao solicitante.

O exemplo a seguir mostra como usar o framework Flask para criar rapidamente uma aplicação web em uma instância ECS e implementar uma API para obter credenciais STS temporárias:

  1. Conecte-se à instância ECS.

    Para mais informações, consulte Purchase a Linux instance and set up a WordPress website from the console.

  2. Instale o Python3.

  3. Crie uma pasta de projeto e navegue até o diretório do projeto.

    mkdir my_web_sample
    cd my_web_sample
  4. Instale as dependências.

    pip3 install Flask
    pip3 install attr
    pip3 install yarl
    pip3 install async_timeout
    pip3 install idna_ssl
    pip3 install attrs
    pip3 install aiosignal
    pip3 install charset_normalizer
    pip3 install alibabacloud_tea_openapi
    pip3 install alibabacloud_sts20150401
    pip3 install alibabacloud_credentials
  5. Escreva o código do backend.

    1. Crie um arquivo main.py.

    2. Adicione o seguinte código Python ao arquivo.

      import json
      from flask import Flask, render_template
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_sts20150401.client import Client as Sts20150401Client
      from alibabacloud_sts20150401 import models as sts_20150401_models
      from alibabacloud_credentials.client import Client as CredentialClient
      app = Flask(__name__)
      # Replace <YOUR_ROLE_ARN> with the ARN of the RAM role.
      role_arn_for_oss_upload = '<YOUR_ROLE_ARN>'
      # Set the region for the STS service, such as cn-hangzhou.
      region_id = 'cn-hangzhou'
      @app.route("/")
      def hello_world():
          return render_template('index.html')
      @app.route('/get_sts_token', methods=['GET'])
      def get_sts_token():
          # When CredentialClient is initialized without parameters, the default credential chain is used.
          # When running the program locally, use the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables to specify the AccessKey pair.
          # When running on ECS, ECI, or Container Service, use the ALIBABA_CLOUD_ECS_METADATA environment variable to specify the bound instance role. The SDK automatically obtains STS temporary credentials.
          config = Config(region_id=region_id, credential=CredentialClient())
          sts_client = Sts20150401Client(config=config)
          assume_role_request = sts_20150401_models.AssumeRoleRequest(
              role_arn=role_arn_for_oss_upload,
              # Set <YOUR_ROLE_SESSION_NAME> to a custom session name.
              role_session_name='<YOUR_ROLE_SESSION_NAME>'
          )
          response = sts_client.assume_role(assume_role_request)
          token = json.dumps(response.body.credentials.to_map())
          return token
      app.run(host="127.0.0.1", port=8000)  # To listen on other addresses such as 0.0.0.0, add an authentication mechanism on the server.
    3. Substitua <YOUR_ROLE_ARN> no código pelo ARN da função obtido na Etapa 3.

    4. Defina <YOUR_ROLE_SESSION_NAME> no código com um nome de sessão personalizado, como role_session_test.

  6. Inicie o aplicativo usando o par AccessKey obtido na Etapa 1.

    ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
  7. Acesse http://<public IP address of the ECS instance>/get_sts_token em um navegador.

    Exemplo de resposta bem-sucedida:

    {"AccessKeyId": "STS.NUDRy4pc4PrizHtBYxxx", "AccessKeySecret": "H3gq6ZP2fsapnuDmGcRBxoVfiakxxx", "Expiration": "2024-05-07T09:05:19Z",
    "SecurityToken":
    "CAISywJ1q6Ft5B2yfSjIr5bxGcOAnbwV57CCeG7FplkGX9VYnqDliTz2IHhMf3ltAu0ftPUxnxxx"}
  8. Pressione Ctrl + C para interromper o aplicativo.

Etapa 2: Baixar e instalar o aplicativo móvel

Android

  1. Baixe o código-fonte do aplicativo móvel.

    Este aplicativo móvel permite enviar imagens para o OSS. Os métodos de upload suportam upload simples e upload retomável. Em condições de rede instáveis, recomenda-se o uso do upload retomável. Também é possível utilizar o service de processamento de imagens para gerar miniaturas e adicionar marcas d'água.

  2. Abra o aplicativo móvel e configure os parâmetros da aplicação.

    1. Servidor de autenticação STS: insira o endereço do servidor de aplicativos implantado na Etapa 1: Configurar o servidor de aplicativos.

    2. Upload Bucket: o bucket para onde o aplicativo móvel enviará os dados.

    3. Região: a região onde o bucket de upload está localizado.

  3. Clique em Settings.

iOS

  1. Baixe o código-fonte do aplicativo móvel.

    Este aplicativo móvel permite enviar imagens para o OSS. Os métodos de upload suportam upload simples e upload retomável. Em condições de rede instáveis, recomenda-se o uso do upload retomável. Também é possível utilizar o service de processamento de imagens para gerar miniaturas e adicionar marcas d'água.

  2. Abra o aplicativo móvel e configure os parâmetros da aplicação.

    Antes de executar a demonstração, configure os parâmetros necessários no arquivo OSSTestMacros.h: OSS_BUCKET_PRIVATE, OSS_ENDPOINT e OSS_STSTOKEN_URL. Defina OSS_STSTOKEN_URL com o endereço do servidor de aplicativos implantado na Etapa 1: Configurar o servidor de aplicativos.

    #ifndef OSSTestMacros_h
    #define OSSTestMacros_h
    #define OSS_ACCESSKEY_ID          @"AccessKeyID"    // RAM user ID
    #define OSS_SECRETKEY_ID          @"AccessKeySecret"  // RAM user secret
    #define OSS_BUCKET_PUBLIC         @"public-bucket"    // Bucket name
    #define OSS_BUCKET_PRIVATE        @"private-bucket"   // Bucket name
    #define OSS_ENDPOINT              @"http://oss-cn-region.aliyuncs.com"   // Alibaba Cloud endpoint
    #define OSS_IMG_ENDPOINT          @"http://img-cn-region.aliyuncs.com"   // Legacy image service endpoint
    #define OSS_MULTIPART_UPLOADKEY   @"multipart_key"    // Object key for multipart upload
    #define OSS_RESUMABLE_UPLOADKEY   @"resumable_key"    // Object key for resumable upload
    #define OSS_CALLBACK_URL          @"http://oss-demo.aliyuncs.com:23450"  // Callback URL for the application server after a successful object upload
    #define OSS_CNAME_URL             @"http://www.cnametest.com/"   // CNAME used to replace the bucket endpoint domain name
    #define OSS_STSTOKEN_URL          @"http://*.*.*.*:*/sts/getsts"   // Address of the STS authorization server
    #define OSS_IMAGE_KEY             @"testImage.png"    // Name of the test image
    #define OSS_DOWNLOAD_FILE_NAME    @"OSS_DOWNLOAD_FILE_NAME"   // Object key used for download
    #endif /* OSSTestMacros_h */
  3. Execute a demonstração.

    Após a execução bem-sucedida da demonstração, a interface do aplicativo exibirá uma prévia da imagem selecionada na parte superior, com um campo de entrada imageName e um botão Select para escolher imagens, um botão Put para enviar imagens, um botão Get para baixar imagens, um botão GetResizeImage para obter miniaturas, um botão Watermark para adicionar marcas d'água, um botão triggerCallback para acionar callbacks, um botão uploadBigFile para enviar arquivos grandes e uma barra de progresso com botões download e cancel na parte inferior.

Etapa 3: Usar o service de upload direto para aplicativos móveis

  1. Defina o nome do objeto no OSS. Clique em Upload e selecione a imagem a ser enviada.

  2. Após o sucesso do upload, verifique o resultado no console.