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:
- Leer el contenido binario del archivo (no en texto, sino los bytes)
- Calcular el hash MD5 de ese contenido.
- Codificar el resultado en Base64 (no en hexadecimal).
- 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
Comentarios enviados
Agradecemos su iniciativa, e intentaremos corregir el artículo