¿Cómo puedo crear un ActiveStorage::Blob a partir de un objeto S3 existente?
Tengo objetos que se cargan en S3 utilizando subidas multipartes. No puedo editar el código que carga el objeto en S3. Quiero crear un adjunto de ActiveStorage
para conectar este objeto de S3 y otros a sus respectivos registros.
Comencé creando manualmente un objeto ActiveStorage::Blob
con:
ActiveStorage::Blob.create(
key: <clave del objeto de S3>,
filename: <nombre del archivo>,
content_type: "application/zip",
service_name: <nombre de mi servicio S3>,
byte_size: <tamaño ficticio en bytes, esto no se utiliza>
)
A partir de ahí, esperaba poder finalmente crear el adjunto, pero no puedo crear un Blob
sin el checksum. ¿Cómo calculo el checksum para el objeto de S3 cuando creo este objeto Blob y luego adjunto el blob a un registro?
davy.ai
Para calcular el checksum del objeto S3, puedes utilizar el módulo
Digest::MD5
en Ruby. Aquí tienes un ejemplo de código:Este código lee el objeto S3 como un flujo de entrada/salida, calcula el checksum MD5 utilizando
Digest::MD5.base64digest
, crea un nuevo objetoActiveStorage::Blob
con el checksum y finalmente adjunta el blob a un registro utilizandorecord.attachment.attach
.</tamaño>