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
- Envie um arquivo e especifique o modelo de destino. A API retorna uma URL
oss://. - 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âmetrosParâmetro | Descrição | Exemplo |
|---|---|---|
| Chave de API do Model Studio | Lida da variável de ambiente |
| Modelo que consumirá o arquivo |
|
| Caminho para o arquivo local |
|
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 exemploFile 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âmetrosParâmetro | Descrição | Exemplo |
|---|---|---|
| Chave de API do Model Studio | Lida da variável de ambiente |
| Modelo que consumirá o arquivo |
|
| Caminho para o arquivo local |
|
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 exemploFile 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- Python 3.9 ou superior
- SDK do DashScope para Python versão
2.0.1ou superior:
pip install -U dashscope
Parâmetros da CLIParâmetro | Obrigatório | Descrição | Exemplo |
|---|---|---|---|
| Sim | Subcomando do DashScope para envio de arquivos |
|
| Sim | Modelo de destino para o arquivo |
|
| Sim | Caminho do arquivo local (relativo ou absoluto) |
|
| Não | Chave de API. Não é necessária se a variável de ambiente |
|
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 inlinedashscope 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.
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. |
|
Header | Authorization | _string_ | Sim | Chave de API do Model Studio. |
|
Params | action | _string_ | Sim | Tipo de operação. Defina como |
|
Params | model | _string_ | Sim | Nome do modelo de destino. |
|
Parâmetros da resposta
Campo | Tipo | Descrição | Exemplo |
|---|---|---|---|
request_id | _string_ | ID exclusivo da solicitação. |
|
data | _object_ | - | - |
data.policy | _string_ | Credencial de envio. |
|
data.signature | _string_ | Assinatura da credencial. |
|
data.upload_dir | _string_ | Caminho do diretório de envio. |
|
data.upload_host | _string_ | Host do OSS para envio. | |
data.expire_in_seconds | _string_ | Validade da credencial em segundos. Obtenha uma nova credencial após a expiração. |
|
data.max_file_size_mb | _string_ | Tamanho máximo do arquivo de envio em MB. Varia conforme o modelo. |
|
data.capacity_limit_mb | _string_ | Capacidade diária de envio por conta Alibaba Cloud em MB. |
|
data.oss_access_key_id | _string_ | Chave de acesso para o envio. |
|
data.x_oss_object_acl | _string_ | Permissão de acesso do arquivo enviado. |
|
data.x_oss_forbid_overwrite | _string_ | Indica se a substituição de arquivos com o mesmo nome está bloqueada. |
|
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_KEYpela 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 dedata.upload_hostobtido 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 |
|
form-data | OSSAccessKeyId | _text_ | Sim | Valor de |
|
form-data | policy | _text_ | Sim | Valor de |
|
form-data | Signature | _text_ | Sim | Valor de |
|
form-data | key | _text_ | Sim | Valor de |
|
form-data | x-oss-object-acl | _text_ | Sim | Valor de |
|
form-data | x-oss-forbid-overwrite | _text_ | Sim | Valor de |
|
form-data | success_action_status | _text_ | Não | Código de status HTTP retornado em caso de sucesso. Geralmente |
|
form-data | file | _file_ | Sim | Arquivo a ser enviado. Apenas um arquivo por solicitação. O campo |
|
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 |
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 |
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:
- Verifique o cabeçalho da solicitação. Ao chamar a API via HTTP (curl, Postman, etc.), adicione
X-DashScope-OssResourceResolve: enableao cabeçalho da solicitação. Sem esse cabeçalho, o servidor não consegue resolver o protocolooss://. O SDK do DashScope adiciona esse cabeçalho automaticamente. - 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.