Enviar Cortes Tomográficos directamente al Storage

Creada por Wenderson Cotta Sansão, Modificado el Jue., 11 Jun. a las 5:04 P. M. por Wenderson Cotta Sansão

Para grandes volúmenes de imágenes y archivos, es posible realizar el envío directamente al storage.


Antes del envío, es necesario que exista un pedido registrado en el sistema. Para ello, puede utilizar un ID de pedido ya existente o crear uno nuevo mediante la API.


Con el ID del pedido y la información de metadatos de los archivos, es posible solicitar al servidor los datos necesarios para el envío al storage.


La solicitud debe realizarse a la URL:

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

El cuerpo de la solicitud debe contener los siguientes parámetros:


request_id → ID del pedido al que se vincularán las imágenes.

tomography_id -> ID de la tomografía a la que pertenece el archivo.

file_name → El nombre del archivo.

file_size →  Tamaño del archivo en bytes.

content_type →  Tipo del archivo (ej.: image/jpeg).

checksum →  Suma de verificación del archivo (MD5 codificado en Base64).

width_px → Ancho de la imagen, en píxeles.

height_px → Alto de la imagen, en píxeles.


Cálculo del checksum:

El cálculo del checksum debe realizarse de la siguiente manera:

  1. Leer el contenido binario del archivo (no en texto, sino los bytes)
  2. Calcular el hash MD5 de ese contenido.
  3. Codificar el resultado en Base64 (no en hexadecimal).
  4. Enviar ese valor como checksum.


Ejemplo con 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"

El retorno esperado es:

{
  "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 contiene la siguiente información: 

  • ID → Identificador único del archivo dentro del sistema. 
  • headers → Encabezados HTTP a utilizar al enviar el archivo al storage. 
  • signed_id → Identificador criptográficamente firmado para un ActiveStorage::Blob o ActiveStorage::Attachment, referente al archivo. 
  • signed_url → URL para el envío del archivo. 
  • download_url -> URL para descarga del archivo.


Con esta información es necesario enviar los archivos al Storage:


Ejemplo con 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"

Tras completar el envío, es necesario actualizar el sistema asociando el signed_id al archivo correspondiente en Cfaz, para permitir que el sistema lo encuentre correctamente.


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

¿Le fue útil este artículo?

¡Qué bueno!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Díganos cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
La verificación de CAPTCHA es obligatoria.

Comentarios enviados

Agradecemos su iniciativa, e intentaremos corregir el artículo