Enviar Cortes Tomográficos diretamente para o Storage

Criada por Alexandre Pateis, Modificado em Ter, 7 Abr na (o) 8:20 AM por Alexandre Pateis

Para grandes volumes de imagens e arquivos, é possível realizar o envio diretamente ao storage.


Antes do envio, é necessário que exista um pedido registrado no sistema. Para isso, você pode utilizar um ID de pedido já existente ou criar um novo por meio da API.


Com o ID do pedido e as informações de metadata dos arquivos, é possível solicitar ao servidor os dados necessários para o envio ao storage.


A requisição deve ser feita para a URL:

https://max.cfaz.net/api/v1/tomography_files/signed_url

O corpo da requisição deve conter os seguintes parâmetros:


request_id → ID do pedido ao qual as imagens serão vinculadas.

tomography_id -> ID da tomografia à que pertence o arquivo.

file_name → O nome do arquivo.

file_size →  Tamanho do arquivo em bytes.

content_type →  Tipo do arquivo (ex.: image/jpeg).

checksum →  Soma de verificação do arquivo (MD5 codificado em Base64).

width_px → Largura da imagem, em pixels.

height_px → Altura da imagem, em pixels.


Cálculo do checksum:

O cálculo do checksum deve ser realizado da seguinte maneira:

  1. Ler o conteúdo binário do arquivo (não em texto, mas os bytes)
  2. Calcular o hash MD5 desse conteúdo.
  3. Codificar o resultado em Base64 (não em hexadecimal).
  4. Enviar esse valor como checksum.


Exemplo com CURL:
curl -X POST "https://max.cfaz.net/api/v1/tomography_files/signed_url" \
  -H "Authorization: Bearer 9b6309a4fe550142d34cba2af195ef07" \
  -d "request_id=299765" \
  -d "tomography_id=2722" \
  -d "file_name=example.jpg" \
  -d "file_size=28125" \
  -d "checksum=FVjB1IwKk4NWO4wOpLewBQ==" \
  -d "width_px=512" \
  -d "height_px=512" \
  -d "content_type=image/jpeg"

O retorno esperado é:

{
  "id": 875413,
  "headers": {
    "Content-MD5": "FVjB1IwKk4NWO4wOpLewBQ==",
    "Content-Disposition": "inline; filename=\"example.jpg\"; filename*=UTF-8''example.jpg",
    "Cache-Control": "public, max-age=31536000, immutable"
  },
  "signed_id": "eyJfcmFpbHMiOnsiZGF0YSI6MTI4MTUyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--0f6f0c5a19f18be089f3192b40eb368beb296c,
  "signed_url": "https://storage.googleapis.com",
  "download_url": "https://storage.googleapis.com",
}

Cada campo contém as seguintes informações: 

  • ID → Identificador único do arquivo dentro do sistema. 
  • headers → Cabeçalhos HTTP a serem utilizados ao enviar o arquivo para o storage. 
  • signed_id → Identificador criptograficamente assinado para um ActiveStorage::Blob ou ActiveStorage::Attachment, referente ao arquivo. 
  • signed_url → URL para envio do arquivo. 
  • download_url -> URL para download do arquivo.


Com essas informações é preciso enviar os arquivos ao Storage:


Exemplo com CURL:
curl -X PUT "https://storage.googleapis.com/..." \
  -H "Content-MD5: FVjB1IwKk4NWO4wOpLewBQ==" \
  -H "Content-Disposition: inline; filename=\"example.jpg\"; filename*=UTF-8''example.jpg" \
  -H "Cache-Control: public, max-age=31536000, immutable" \
  --upload-file "example.jpg"

Após a conclusão do envio, é necessário atualizar o sistema associando o signed_id ao respectivo arquivo no Cfaz. Para permitir que o sistema encontre-o corretamente.


Exemplo com CURL:
curl -X PUT https://max.cfaz.net/api/v1/tomography_files/3156 \
  -H "Authorization: Bearer 9b6309a4fe550142d34cba2af195ef07" \
  -d "tomography_file[document]=eyJfcmFpbHMiOnsiZGF0YSI6MTI4MDI4OCwicHVyIjoiYmxvYl9pZCJ9fQ==--c0fb2d93d4ac14023162fc8a8ca4292ec3e182c4"

Este artigo foi útil?

Que bom!

Obrigado pelo seu feedback

Desculpe! Não conseguimos ajudar você

Obrigado pelo seu feedback

Deixe-nos saber como podemos melhorar este artigo!

Selecione pelo menos um dos motivos
A verificação do CAPTCHA é obrigatória.

Feedback enviado

Agradecemos seu esforço e tentaremos corrigir o artigo