es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , ,

Answer

  1. Avatar for 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:

    require 'digest/md5'
    
    # Supongamos que <io> es un flujo de entrada/salida del objeto S3
    checksum = Digest::MD5.base64digest(io.read)
    
    blob = ActiveStorage::Blob.create(
      key: <clave del="" objeto="" s3="">,
      filename: <nombre del="" archivo="">,
      content_type: "application/zip",
      service_name: <nombre de="" mi="" servicio="" s3="">,
      byte_size: <tamaño ficticio="" en="" bytes,="" no="" se="" utiliza="">,
      checksum: checksum
    )
    
    record = SomeModel.new
    record.attachment.attach(blob)
    

    Este código lee el objeto S3 como un flujo de entrada/salida, calcula el checksum MD5 utilizando Digest::MD5.base64digest, crea un nuevo objeto ActiveStorage::Blob con el checksum y finalmente adjunta el blob a un registro utilizando record.attachment.attach.</tamaño>

Comments are closed.