Skip to main content

POST Iniciar Upload Direto de Arquivos

Gera URLs pré-assinadas para o cliente enviar arquivos diretamente ao Cloudflare R2, sem passar pelo backend. Para arquivos até 10 MB, gera uma única URL (PUT simples); para arquivos maiores, inicia uma sessão multipart com uma URL por parte de 10 MB.

Autenticação necessária

Esta rota requer o header Authorization: Bearer {accessToken}

Fluxo completo
  1. Chame esta rota para obter as URLs de upload.
  2. Faça o(s) PUT diretamente para a(s) uploadUrl(s) retornada(s) — para multipart, uma parte por URL, guardando o ETag de cada resposta.
  3. Chame Completar Upload Direto para finalizar e associar os arquivos à consulta.
Limites

Máximo de 15 MB por arquivo e 10 arquivos por requisição. As URLs pré-assinadas expiram em 600 segundos (10 minutos).


Endpoint

POST https://api-dev.imagemais.com.br/api/consultations/direct-upload/initiate

Corpo da Requisição

CampoTipoObrigatórioDescrição
patientIdnumberID do paciente
examTypestringTipo/nome do exame (usado no caminho de armazenamento)
consultationIdnumberID da consulta vinculada
filesarray1 a 10 arquivos
files[].fileNamestringNome original do arquivo (extensão deve ser permitida — ver abaixo)
files[].fileSizenumberTamanho em bytes (máx. 15728640 = 15 MB)
files[].contentTypestringContent-Type do arquivo (ex.: application/pdf)

Extensões aceitas

jpg, jpeg, png, gif, pdf, doc, docx, xls, xlsx, txt


Requisição

curl -X 'POST' \
'https://api-dev.imagemais.com.br/api/consultations/direct-upload/initiate' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {accessToken}' \
-H 'Content-Type: application/json' \
-d '{
"patientId": 9,
"examType": "Raio-X",
"consultationId": 17,
"files": [
{ "fileName": "exame.pdf", "fileSize": 1000000, "contentType": "application/pdf" }
]
}'

Respostas

201 Criado

Arquivo ≤ 10 MB (mode: "single") — um único PUT para uploadUrl:

{
"files": [
{
"mode": "single",
"originalName": "exame.pdf",
"fileName": "bd7495aa-e483-4c88-8ce8-378671f77f53.pdf",
"key": "consultation/9/17/raio-x/7f8ea8ab9c3767608d05671d0ae2e1c367d34164572bfe159b5bbfe90c518bc8",
"uploadUrl": "https://imagemais-bucket-development.b26dbae339f36de5139f8e8587f7cd7b.r2.cloudflarestorage.com/consultation/9/17/raio-x/7f8ea8ab9c...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=600&..."
}
]
}

Arquivo > 10 MB (mode: "multipart") — um PUT por parte, cada um retornando um ETag:

{
"files": [
{
"mode": "multipart",
"originalName": "exame-grande.pdf",
"fileName": "29f685f3-c12f-41f3-ab87-ec062e14582f.pdf",
"key": "consultation/9/17/raio-x/7fc828818eed96c3b3c7a94c8118a3e7b95156b5425fddc91e2a854c11631ad8",
"uploadId": "AEI2gpj0SABougXtRKFai2E2lCdp3hfiLrcjmemx5KhFwoY2wpUp...",
"partSize": 10485760,
"parts": [
{
"partNumber": 1,
"url": "https://imagemais-bucket-development.b26dbae339f36de5139f8e8587f7cd7b.r2.cloudflarestorage.com/consultation/9/17/raio-x/...?...&partNumber=1&uploadId=...&x-id=UploadPart"
},
{
"partNumber": 2,
"url": "https://imagemais-bucket-development.b26dbae339f36de5139f8e8587f7cd7b.r2.cloudflarestorage.com/consultation/9/17/raio-x/...?...&partNumber=2&uploadId=...&x-id=UploadPart"
}
]
}
]
}

400 Arquivo excede 15 MB

{
"message": ["files.0.fileSize must not be greater than 15728640"],
"error": "Bad Request",
"statusCode": 400
}

404 Consulta não encontrada

{
"message": "Consulta não encontrada",
"error": "Not Found",
"statusCode": 404
}