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:
- Ler o conteúdo binário do arquivo (não em texto, mas os bytes)
- Calcular o hash MD5 desse conteúdo.
- Codificar o resultado em Base64 (não em hexadecimal).
- 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
Feedback enviado
Agradecemos seu esforço e tentaremos corrigir o artigo