Todos os produtos
Search
Central de documentação

Alibaba Cloud Model Studio:Upload local files to get temporary URLs

Última atualização: Oct 27, 2026

Modelos multimodais como o Qwen-VL exigem URLs de arquivo para entradas de imagem, vídeo e áudio. O Model Studio oferece armazenamento temporário gratuito caso você não tenha URLs públicas: envie um arquivo e obtenha uma URL oss:// válida por 48 horas .

ImportanteAs URLs temporárias destinam-se apenas a desenvolvimento e testes. Não as utilize em produção, cenários de alta concorrência ou testes de estresse. Para cargas de trabalho em produção, use o Object Storage Service (OSS) para garantir disponibilidade de longo prazo e evitar limites de taxa.

ObservaçãoEste recurso está disponível nas regiões de Singapura e China (Beijing). Os exemplos de código deste documento usam a região de Singapura por padrão. Para usar a região de Beijing, siga os comentários dos exemplos para substituir dashscope-intl.aliyuncs.com por dashscope.aliyuncs.com na URL da requisição e use uma chave de API da região de Beijing (as chaves de API das duas regiões são diferentes; consulte chave de API).

Como funciona

  1. Envie um arquivo e especifique o modelo de destino. A API retorna uma URL oss://.
  2. Informe essa URL na chamada do modelo. É obrigatório concluir a Etapa 2 para usar a URL temporária; ignorá-la causa erros. Para chamadas HTTP, adicione o cabeçalho X-DashScope-OssResourceResolve: enable. O SDK do DashScope adiciona esse cabeçalho automaticamente.

Limitações

Restrição

Detalhe

Vinculação arquivo-modelo

Especifique o nome do modelo no envio. Use o mesmo modelo nas chamadas subsequentes, pois os arquivos não podem ser compartilhados entre modelos diferentes.

Limites de tamanho de arquivo

O tamanho do arquivo não deve exceder 1 GB e precisa respeitar os limites específicos do modelo selecionado.

Vinculação arquivo-conta

As chaves de API usadas para envio e para chamadas de modelo devem pertencer à mesma conta Alibaba Cloud. Não é possível compartilhar arquivos entre contas distintas.

Expiração em 48 horas

Os arquivos são excluídos automaticamente após 48 horas. Conclua as chamadas de modelo dentro desse período.

Sem gerenciamento pós-envio

Não é possível consultar, modificar ou baixar os arquivos. Eles servem apenas como parâmetros de URL nas chamadas de modelo.

Limite de taxa

A API de credenciais de envio tem limite de 100 QPS por conta e por modelo. Solicitações excedentes falham. O armazenamento temporário não suporta scale-out.

Pré-requisitos

Antes de começar:

  • Uma chave de API configurada como variável de ambiente
  • O nome do modelo que consumirá o arquivo (por exemplo, qwen3-vl-plus)

Etapa 1: Obter uma URL temporária

Envie um arquivo e obtenha sua URL temporária usando um destes métodos:

Upload with code

Python

Pré-requisitos
  • Python 3.9 ou superior
  • Instale as dependências:
pip install -U requests
Parâmetros

Parâmetro

Descrição

Exemplo

api_key

Chave de API do Model Studio

Lida da variável de ambiente DASHSCOPE_API_KEY

model_name

Modelo que consumirá o arquivo

qwen3-vl-plus

file_path

Caminho para o arquivo local

/tmp/cat.png

Código de exemplo
import os
import requests
from pathlib import Path
from datetime import datetime, timedelta

def get_upload_policy(api_key, model_name):
    """Get the file upload credential."""
    # The API keys for the Singapore and Beijing regions are different. Use the key for the corresponding region.
    # The URL below is for the Singapore region. For the Beijing region, replace it with: https://dashscope.aliyuncs.com/api/v1/uploads
    url = "https://dashscope-intl.aliyuncs.com/api/v1/uploads"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    params = {
        "action": "getPolicy",
        "model": model_name
    }

    response = requests.get(url, headers=headers, params=params)
    if response.status_code != 200:
        raise Exception(f"Failed to get upload policy: {response.text}")

    return response.json()['data']

def upload_file_to_oss(policy_data, file_path):
    """Upload the file to the temporary OSS storage."""
    file_name = Path(file_path).name
    key = f"{policy_data['upload_dir']}/{file_name}"

    with open(file_path, 'rb') as file:
        files = {
            'OSSAccessKeyId': (None, policy_data['oss_access_key_id']),
            'Signature': (None, policy_data['signature']),
            'policy': (None, policy_data['policy']),
            'x-oss-object-acl': (None, policy_data['x_oss_object_acl']),
            'x-oss-forbid-overwrite': (None, policy_data['x_oss_forbid_overwrite']),
            'key': (None, key),
            'success_action_status': (None, '200'),
            'file': (file_name, file)
        }

        response = requests.post(policy_data['upload_host'], files=files)
        if response.status_code != 200:
            raise Exception(f"Failed to upload file: {response.text}")

    return f"oss://{key}"

def upload_file_and_get_url(api_key, model_name, file_path):
    """Upload the file and get the URL."""
    # 1. Get the upload credential (rate-limited to 100 QPS)
    policy_data = get_upload_policy(api_key, model_name)
    # 2. Upload the file to OSS
    oss_url = upload_file_to_oss(policy_data, file_path)

    return oss_url

# Example
if __name__ == "__main__":
    # Read the API key from the environment variable
    api_key = os.getenv("DASHSCOPE_API_KEY")
    if not api_key:
        raise Exception("Set the DASHSCOPE_API_KEY environment variable.")

    # Set the model name
    model_name="qwen3-vl-plus"

    # Replace with the actual file path
    file_path = "/tmp/cat.png"

    try:
        public_url = upload_file_and_get_url(api_key, model_name, file_path)
        expire_time = datetime.now() + timedelta(hours=48)
        print(f"File uploaded successfully. URL valid for 48 hours.")
        print(f"Expiration time: {expire_time.strftime('%Y-%m-%d %H:%M:%S')}")
        print(f"Temporary URL: {public_url}")
        print("Note: When you use a temporary URL with the oss:// prefix, you must add the X-DashScope-OssResourceResolve: enable parameter to the HTTP request header. For more information, see https://www.alibabacloud.com/help/en/model-studio/get-temporary-file-url#http-call")

    except Exception as e:
        print(f"Error: {str(e)}")
Saída de exemplo
File uploaded successfully. URL valid for 48 hours.
Expiration time: 2024-07-18 17:36:15
Temporary URL: oss://dashscope-instant/xxx/2024-07-18/xxx/cat.png
Note: When you use a temporary URL with the oss:// prefix, you must add the X-DashScope-OssResourceResolve: enable parameter to the HTTP request header. For more information, see https://www.alibabacloud.com/help/en/model-studio/get-temporary-file-url#http-call

ImportanteApós obter a URL temporária, adicione o cabeçalho X-DashScope-OssResourceResolve: enable às solicitações HTTP ao fazer uma chamada. Para mais informações, consulte Chamada via HTTP.

Java

Pré-requisitos
  • JDK 1.8 ou superior
  • Adicione as seguintes dependências ao pom.xml:
 <dependencies>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20230618</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.13</version>
        </dependency>
</dependencies>
Parâmetros

Parâmetro

Descrição

Exemplo

apiKey

Chave de API do Model Studio

Lida da variável de ambiente DASHSCOPE_API_KEY

modelName

Modelo que consumirá o arquivo

qwen3-vl-plus

filePath

Caminho para o arquivo local

src/main/resources/tmp/cat.png

Código de exemplo
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.HttpStatus;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class PublicUrlHandler {

    // The API keys for the Singapore and Beijing regions are different. Use the key for the corresponding region.
    // The URL below is for the Singapore region. For the Beijing region, replace it with: https://dashscope.aliyuncs.com/api/v1/uploads
    private static final String API_URL = "https://dashscope-intl.aliyuncs.com/api/v1/uploads";

    public static JSONObject getUploadPolicy(String apiKey, String modelName) throws IOException {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = new HttpGet(API_URL);
            httpGet.addHeader("Authorization", "Bearer " + apiKey);
            httpGet.addHeader("Content-Type", "application/json");

            String query = String.format("action=getPolicy&model=%s", modelName);
            httpGet.setURI(httpGet.getURI().resolve(httpGet.getURI() + "?" + query));

            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                if (response.getStatusLine().getStatusCode() != 200) {
                    throw new IOException("Failed to get upload policy: " +
                            EntityUtils.toString(response.getEntity()));
                }
                String responseBody = EntityUtils.toString(response.getEntity());
                return new JSONObject(responseBody).getJSONObject("data");
            }
        }
    }

    public static String uploadFileToOSS(JSONObject policyData, String filePath) throws IOException {
        Path path = Paths.get(filePath);
        String fileName = path.getFileName().toString();
        String key = policyData.getString("upload_dir") + "/" + fileName;

        HttpPost httpPost = new HttpPost(policyData.getString("upload_host"));
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        builder.addTextBody("OSSAccessKeyId", policyData.getString("oss_access_key_id"));
        builder.addTextBody("Signature", policyData.getString("signature"));
        builder.addTextBody("policy", policyData.getString("policy"));
        builder.addTextBody("x-oss-object-acl", policyData.getString("x_oss_object_acl"));
        builder.addTextBody("x-oss-forbid-overwrite", policyData.getString("x_oss_forbid_overwrite"));
        builder.addTextBody("key", key);
        builder.addTextBody("success_action_status", "200");
        byte[] fileContent = Files.readAllBytes(path);
        builder.addBinaryBody("file", fileContent, ContentType.DEFAULT_BINARY, fileName);

        httpPost.setEntity(builder.build());

        try (CloseableHttpClient httpClient = HttpClients.createDefault();
             CloseableHttpResponse response = httpClient.execute(httpPost)) {
            if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                throw new IOException("Failed to upload file: " +
                        EntityUtils.toString(response.getEntity()));
            }
            return "oss://" + key;
        }
    }

    public static String uploadFileAndGetUrl(String apiKey, String modelName, String filePath) throws IOException {
        JSONObject policyData = getUploadPolicy(apiKey, modelName);
        return uploadFileToOSS(policyData, filePath);
    }

    public static void main(String[] args) {
        // Read the API key from the environment variable
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        if (apiKey == null || apiKey.isEmpty()) {
            System.err.println("Set the DASHSCOPE_API_KEY environment variable.");
            System.exit(1);
        }
        // Model name
        String modelName = "qwen3-vl-plus";
        // Replace with the actual file path
        String filePath = "src/main/resources/tmp/cat.png";

        try {
            // Check if the file exists
            File file = new File(filePath);
            if (!file.exists()) {
                System.err.println("File does not exist: " + filePath);
                System.exit(1);
            }

            String publicUrl = uploadFileAndGetUrl(apiKey, modelName, filePath);
            LocalDateTime expireTime = LocalDateTime.now().plusHours(48);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

            System.out.println("File uploaded successfully. URL valid for 48 hours.");
            System.out.println("Expiration time: " + expireTime.format(formatter));
            System.out.println("Temporary URL: " + publicUrl);
            System.out.println("Note: When you use a temporary URL with the oss:// prefix, you must add the X-DashScope-OssResourceResolve: enable parameter to the HTTP request header. For more information, see https://www.alibabacloud.com/help/en/model-studio/get-temporary-file-url#http-call");
        } catch (IOException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}
Saída de exemplo
File uploaded successfully. URL valid for 48 hours.
Expiration time: 2024-07-18 17:36:15
Temporary URL: oss://dashscope-instant/xxx/2024-07-18/xxx/cat.png
Note: When you use a temporary URL with the oss:// prefix, you must add the X-DashScope-OssResourceResolve: enable parameter to the HTTP request header. For more information, see https://www.alibabacloud.com/help/en/model-studio/get-temporary-file-url#http-call

ImportanteApós obter a URL temporária, adicione o cabeçalho X-DashScope-OssResourceResolve: enable às solicitações HTTP ao fazer uma chamada. Para mais informações, consulte Chamada via HTTP.

Upload with the CLI

A CLI do DashScope envia um arquivo com um único comando e retorna a URL temporária.

Pré-requisitos
pip install -U dashscope
Parâmetros da CLI

Parâmetro

Obrigatório

Descrição

Exemplo

oss.upload

Sim

Subcomando do DashScope para envio de arquivos

oss.upload

--model

Sim

Modelo de destino para o arquivo

qwen3-vl-plus

--file

Sim

Caminho do arquivo local (relativo ou absoluto)

cat.png, /data/img.jpg

--api_key

Não

Chave de API. Não é necessária se a variável de ambiente DASHSCOPE_API_KEY estiver definida.

sk-xxxx

Envio com variável de ambiente (recomendado)

Pré-requisito: Configurar a chave de API como variável de ambiente:

dashscope oss.upload --model qwen3-vl-plus --file cat.png

Saída de exemplo:

Start oss.upload: model=qwen3-vl-plus, file=cat.png, api_key=None
Uploaded oss url: oss://dashscope-instant/xxxx/2025-08-01/xxxx/cat.png
Envio com chave de API inline
dashscope oss.upload --model qwen3-vl-plus --file cat.png --api_key sk-xxxxxxx

Saída de exemplo:

Start oss.upload: model=qwen3-vl-plus, file=cat.png, api_key=sk-xxxxxxx
Uploaded oss url: oss://dashscope-instant/xxx/2025-08-01/xxx/cat.png

ImportanteApós obter a URL temporária, adicione o cabeçalho X-DashScope-OssResourceResolve: enable às solicitações HTTP ao fazer uma chamada. Para mais informações, consulte Chamada via HTTP.

Etapa 2: Chamar o modelo com a URL temporária

Após enviar um arquivo, use a URL oss:// na chamada do modelo. Duas regras se aplicam:

  • Consistência de modelo: Use o mesmo modelo especificado durante o envio.
  • Consistência de conta: Use uma chave de API pertencente à mesma conta Alibaba Cloud.

Escolha um destes métodos:

HTTP

Ao chamar a API via HTTP (curl, Postman, etc.), adicione este cabeçalho:

X-DashScope-OssResourceResolve: enable

Sem esse cabeçalho, a API não consegue resolver URLs oss:// e as solicitações falham.

Solicitação de exemplo

Este exemplo chama o qwen3-vl-plus para descrever uma imagem enviada.

Substitua oss://... pela sua URL temporária real.

# The URL below is for the Singapore region. For the Beijing region, replace it with: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-OssResourceResolve: enable' \
-d '{
  "model": "qwen3-vl-plus",
  "messages": [{
      "role": "user",
      "content":
      [{"type": "text","text": "What is this?"},
       {"type": "image_url","image_url": {"url": "oss://dashscope-instant/xxx/2024-07-18/xxxx/cat.png"}}]
    }]
}'
Resposta de exemplo
{
  "choices": [
    {
      "message": {
        "content": "This is a picture of a white cat running on the grass. The cat has blue eyes and looks very cute and lively. The background is a blurred natural landscape, which emphasizes the subject: the small cat dashing forward. This photographic technique is called shallow depth of field (or a large aperture effect). It makes the cat in the foreground sharp and clear while blurring the background to highlight the subject and create a dreamlike effect. Overall, this photo feels relaxed and pleasant, and it captures a great moment of the animal's behavior.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 1253,
    "completion_tokens": 104,
    "total_tokens": 1357
  },
  "created": 1739349052,
  "system_fingerprint": null,
  "model": "qwen3-vl-plus",
  "id": "chatcmpl-cfc4f2aa-22a8-9a94-8243-44c5bd9899bc"
}

SDK do DashScope

O SDK do DashScope gerencia o cabeçalho X-DashScope-OssResourceResolve automaticamente. Basta passar a URL oss:// diretamente como parâmetro de arquivo.

O SDK da OpenAI não é suportado. Nem todos os modelos aceitam chamadas via SDK. Consulte a referência de API do modelo específico para detalhes.

Python

Pré-requisito: SDK do DashScope para Python 2.0.1 ou superior.

Este exemplo chama o qwen3-vl-plus para descrever uma imagem enviada. Este código aplica-se aos modelos qwen-vl e omni.

Substitua oss://... no parâmetro de imagem pela sua URL temporária real.

import os
import dashscope

# The API keys for the Singapore and Beijing regions are different. Use the key for the corresponding region.
# Se a variável de ambiente não estiver configurada, substitua por: api_key="sk-xxx"
client = dashscope.Client(api_key=os.getenv('DASHSCOPE_API_KEY'))

messages = [
    {
        "role": "system",
        "content": [{"text": "You are a helpful assistant."}]
    },
    {
        "role": "user",
        "content": [
            {"image": "oss://dashscope-instant/xxx/2024-07-18/xxxx/cat.png"},
            {"text": "What is this?"}]
    }]

response = client.multimodal.chat.create(
    model='qwen3-vl-plus',
    messages=messages
)

print(response.output_text)
Resposta de exemplo
{
    "request_id": "ccd9dcfb-98f0-92bc-xxxxxx",
    "choices": [
        {
            "index": 0,
            "finish_reason": "stop",
            "message": {
                "role": "assistant",
                "content": "This is a photo of a cat running on the grass. The cat's fur is mainly white with light brown spots, and its eyes are blue, making it look very cute. The background is a blurry green meadow with some trees, and the sunlight adds a warm feeling to the whole picture. The cat's posture shows that it is moving quickly, possibly chasing something or just enjoying the outdoors. Overall, this is a vibrant and lively picture."
            }
        }
    ],
    "usage": {
        "input_tokens": 1112,
        "output_tokens": 91,
        "total_tokens": 1203,
        "input_tokens_details": {
            "text_tokens": 21,
            "image_tokens": 1091
        },
        "output_tokens_details": {
            "text_tokens": 91
        }
    }
}

Java

Pré-requisito: SDK do DashScope para Java 2.21.0 ou superior.

Este exemplo chama o qwen3-vl-plus para descrever uma imagem enviada. Este código aplica-se aos modelos qwen-vl e omni.

Substitua oss://... pela sua URL temporária real.

import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.Arrays;

public class MultiModalConversationUsage {

    private static final String modelName = "qwen3-vl-plus";

    // The API keys for the Singapore and Beijing regions are different. Use the key for the corresponding region.
    // If not configured as environment variable, replace with: api_key="sk-xxx"
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void simpleMultiModalConversationCall() throws ApiException, NoApiKeyException, UploadFileException {
        // The URL below is for the Singapore region. For the Beijing region, replace it with: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessageItemText systemText = new MultiModalMessageItemText("You are a helpful assistant.");
        MultiModalConversationMessage systemMessage = MultiModalConversationMessage.builder()
                .role(Role.SYSTEM.getValue()).content(Arrays.asList(systemText)).build();
        MultiModalMessageItemImage userImage = new MultiModalMessageItemImage(
                "oss://dashscope-instant/xxx/2024-07-18/xxxx/cat.png");
        MultiModalMessageItemText userText = new MultiModalMessageItemText("What is this?");
        MultiModalConversationMessage userMessage =
                MultiModalConversationMessage.builder().role(Role.USER.getValue())
                        .content(Arrays.asList(userImage, userText)).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .model(MultiModalConversationUsage.modelName)
                .apiKey(apiKey)
                .message(systemMessage)
                .vlHighResolutionImages(true)
                .vlEnableImageHwOutput(true)
//                .incrementalOutput(true)
                .message(userMessage).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(JsonUtils.toJson(result));

    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }

}
Resposta de exemplo
{
    "requestId": "b6d60f91-4a7f-9257-xxxxxx",
    "usage": {
        "input_tokens": 1112,
        "output_tokens": 91,
        "total_tokens": 1203,
        "image_tokens": 1091,
        "input_tokens_details": {
            "text_tokens": 21,
            "image_tokens": 1091
        },
        "output_tokens_details": {
            "text_tokens": 91
        }
    },
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "text": "This is a photo of a cat running on the grass. The cat's fur is mainly white with light brown spots, and its eyes are blue, making it look very cute. The background is a blurry green meadow with some trees, and the sunlight adds a warm feeling to the whole picture. The cat's posture shows that it is moving quickly, possibly chasing something or just enjoying the outdoors. Overall, this is a vibrant and lively picture."
                        },
                        {
                            "image_hw": [
                                [
                                    "924",
                                    "924"
                                ]
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

Referência da API

Os exemplos de código e a CLI na Etapa 1 encapsulam internamente estas três operações de API. Use esta referência para implementar o fluxo de envio manualmente.

Obter uma credencial de envio de arquivo

Singapore: GET https://dashscope-intl.aliyuncs.com/api/v1/uploads
Beijing: GET https://dashscope.aliyuncs.com/api/v1/uploads

ImportanteA API de credenciais tem limite de taxa de 100 QPS por conta e por modelo. O armazenamento temporário não permite scale-out. Para cargas de trabalho em produção ou de alta concorrência, use o Alibaba Cloud OSS.

Parâmetros da solicitação

Localização

Campo

Tipo

Obrigatório

Descrição

Exemplo

Header

Content-Type

_string_

Sim

Tipo de solicitação.

application/json

Header

Authorization

_string_

Sim

Chave de API do Model Studio.

Bearer sk-xxx

Params

action

_string_

Sim

Tipo de operação. Defina como getPolicy.

getPolicy

Params

model

_string_

Sim

Nome do modelo de destino.

qwen3-vl-plus

Parâmetros da resposta

Campo

Tipo

Descrição

Exemplo

request_id

_string_

ID exclusivo da solicitação.

7574ee8f-...-11c33ab46e51

data

_object_

-

-

data.policy

_string_

Credencial de envio.

eyJl...1ZSJ9XX0=

data.signature

_string_

Assinatura da credencial.

g5K...d40=

data.upload_dir

_string_

Caminho do diretório de envio.

dashscope-instant/xxx/2024-07-18/xxxx

data.upload_host

_string_

Host do OSS para envio.

https://dashscope-file-xxx.oss-cn-beijing.aliyuncs.com

data.expire_in_seconds

_string_

Validade da credencial em segundos. Obtenha uma nova credencial após a expiração.

300

data.max_file_size_mb

_string_

Tamanho máximo do arquivo de envio em MB. Varia conforme o modelo.

100

data.capacity_limit_mb

_string_

Capacidade diária de envio por conta Alibaba Cloud em MB.

999999999

data.oss_access_key_id

_string_

Chave de acesso para o envio.

LTAxxx

data.x_oss_object_acl

_string_

Permissão de acesso do arquivo enviado. private indica que o arquivo é privado.

private

data.x_oss_forbid_overwrite

_string_

Indica se a substituição de arquivos com o mesmo nome está bloqueada. true significa que a substituição está bloqueada.

true

Solicitação de exemplo

# The URL below is for the Singapore region. For the Beijing region, replace it with: https://dashscope.aliyuncs.com/api/v1/uploads
curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/uploads?action=getPolicy&model=qwen3-vl-plus' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json'

Se a chave de API não estiver configurada como variável de ambiente, substitua $DASHSCOPE_API_KEY pela sua chave de API: --header "Authorization: Bearer sk-xxx" .

Resposta de exemplo

{
    "request_id": "52f4383a-c67d-9f8c-xxxxxx",
    "data": {
        "policy": "eyJl...1ZSJ=",
        "signature": "YOUR_SIGNATURE",
        "upload_dir": "dashscope-instant/xxx/2024-07-18/xxx",
        "upload_host": "https://dashscope-file-xxx.oss-cn-beijing.aliyuncs.com",
        "expire_in_seconds": 300,
        "max_file_size_mb": 100,
        "capacity_limit_mb": 999999999,
        "oss_access_key_id": "LTA...",
        "x_oss_object_acl": "private",
        "x_oss_forbid_overwrite": "true"
    }
}

Enviar o arquivo para o armazenamento temporário

POST {data.upload_host}

Substitua {data.upload_host} pelo valor de data.upload_host obtido na resposta da credencial.

Parâmetros da solicitação

Localização

Campo

Tipo

Obrigatório

Descrição

Exemplo

Header

Content-Type

_string_

Não

Envie o formulário como multipart/form-data. O boundary é gerado automaticamente pelo seu cliente HTTP.

multipart/form-data; boundary=9431149156168

form-data

OSSAccessKeyId

_text_

Sim

Valor de data.oss_access_key_id da resposta da credencial.

LTAm5xxx

form-data

policy

_text_

Sim

Valor de data.policy da resposta da credencial.

g5K...d40=

form-data

Signature

_text_

Sim

Valor de data.signature da resposta da credencial.

Sm/tv7DcZuTZftFVvt5yOoSETsc=

form-data

key

_text_

Sim

Valor de data.upload_dir da resposta da credencial, concatenado com /<filename>.

dashscope-instant/xxx/2024-07-18/xxx/cat.png

form-data

x-oss-object-acl

_text_

Sim

Valor de data.x_oss_object_acl da resposta da credencial.

private

form-data

x-oss-forbid-overwrite

_text_

Sim

Valor de data.x_oss_forbid_overwrite da resposta da credencial.

true

form-data

success_action_status

_text_

Não

Código de status HTTP retornado em caso de sucesso. Geralmente 200.

200

form-data

file

_file_

Sim

Arquivo a ser enviado. Apenas um arquivo por solicitação. O campo file deve ser o último campo do formulário.

file=@"/tmp/cat.png"

Em caso de sucesso, a API retorna HTTP 200 sem corpo de resposta.

Solicitação de exemplo

curl --location 'https://dashscope-file-xxx.oss-cn-beijing.aliyuncs.com' \
--form 'OSSAccessKeyId="LTAm5xxx"' \
--form 'Signature="Sm/tv7DcZuTZftFVvt5yOoSETsc="' \
--form 'policy="eyJleHBpcmF0aW9 ... ... ... dHJ1ZSJ9XX0="' \
--form 'x-oss-object-acl="private"' \
--form 'x-oss-forbid-overwrite="true"' \
--form 'key="dashscope-instant/xxx/2024-07-18/xxx/cat.png"' \
--form 'success_action_status="200"' \
--form 'file=@"/tmp/cat.png"'

Construir a URL do arquivo

Concatene oss:// com a key da solicitação de envio. Esta URL é válida por 48 horas.

oss://dashscope-instant/xxx/2024-07-18/xxxx/cat.png

Códigos de erro

Se as chamadas de API falharem, consulte Mensagens de erro para solução de problemas gerais.

Estes códigos de erro são específicos para envios de arquivos temporários:

Status HTTP

Código de erro

Mensagem de erro

Causa e resolução

400

invalid_parameter_error

InternalError.Algo.InvalidParameter: The provided URL does not appear to be valid. Ensure it is correctly formatted.

A URL está malformada. Verifique o formato da URL. Se estiver usando uma URL oss:// via HTTP, adicione o cabeçalho X-DashScope-OssResourceResolve: enable.

400

InvalidParameter.DataInspection

The media format is not supported or incorrect for the data inspection.

O cabeçalho da solicitação não contém X-DashScope-OssResourceResolve: enable ou o formato do arquivo não é suportado pelo modelo. Consulte Mensagens de erro.

403

AccessDenied

Invalid according to Policy: Policy expired.

A credencial de envio expirou. Chame a API de credenciais novamente para obter uma nova.

429

Throttling.RateQuota

Requests rate limit exceeded, please try again later.

A taxa de solicitações excede 100 QPS. Reduza a frequência de solicitações ou migre para o OSS para cargas de trabalho em produção.

Perguntas frequentes

O que fazer se uma URL oss:// retornar um erro?

Siga estas etapas:

  1. Verifique o cabeçalho da solicitação. Ao chamar a API via HTTP (curl, Postman, etc.), adicione X-DashScope-OssResourceResolve: enable ao cabeçalho da solicitação. Sem esse cabeçalho, o servidor não consegue resolver o protocolo oss://. O SDK do DashScope adiciona esse cabeçalho automaticamente.
  2. Verifique a validade da URL. A URL oss:// expira 48 horas após o envio. Se tiver expirado, envie o arquivo novamente para obter uma nova URL.

Posso usar chaves de API diferentes para envio de arquivos e chamadas de modelo?

Sim, desde que ambas as chaves de API pertençam à mesma conta Alibaba Cloud. O acesso aos arquivos é gerenciado no nível da conta, não no nível da chave de API.

Chaves de API de contas Alibaba Cloud diferentes não conseguem acessar os arquivos enviados umas das outras.