Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

527
Vistas
¿Por qué AWS carga rutas de archivos literales, en lugar de cargar imágenes?

TL;RD

¿Cómo se ingresan rutas de archivo en el cliente Ruby de la API de AWS S3 y se interpretan como imágenes, no como rutas de archivo literales?

Más detalles

Estoy usando el cliente Ruby AWS S3 para cargar imágenes mediante programación. Tomé este código de su código de inicio de ejemplo y apenas lo modifiqué. Consulte https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/s3-example-upload-bucket-item.html

 def object_uploaded?(s3_client, bucket_name, object_key) response = s3_client.put_object( body: "tmp/cosn_img.jpeg", # is always interpreted literally acl: "public-read", bucket: bucket_name, key: object_key ) if response.etag return true else return false end rescue StandardError => e puts "Error uploading object: #{e.message}" return false end # Full example call: def run_me bucket_name = 'cosn-images' object_key = "#{order_number}-trello-pic_#{list_config[:ac_campaign_id]}.jpeg" region = 'us-west-2' s3_client = Aws::S3::Client.new(region: region) if object_uploaded?(s3_client, bucket_name, object_key) puts "Object '#{object_key}' uploaded to bucket '#{bucket_name}'." else puts "Object '#{object_key}' not uploaded to bucket '#{bucket_name}'." end end

Esto funciona y se puede cargar en AWS, pero solo carga la ruta del archivo desde el cuerpo, no el archivo en sí.

ingrese la descripción de la imagen aquí

ruta del archivo que se muestra al hacer clic en el enlace del archivo adjunto

Por lo que puedo ver en la documentación del Cliente, esto debería funcionar. https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#put_object-instance_method

ingrese la descripción de la imagen aquí documentos del cliente

Además, la carga manual de este archivo a través de la interfaz funciona bien, por lo que tiene que ser un problema en mi código.

¿Cómo se supone que debe informar a AWS que debe interpretar esa ruta de archivo como una ruta de archivo, y no solo como una cadena literal?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sus documentos parecen un poco extraños y no sencillos, pero parece que es posible que deba pasar un objeto file/io, en lugar de la ruta.

Los documentos de Ruby aquí tienen un ejemplo como este:

 s3_client.put_object( :bucket_name => 'mybucket', :key => 'some/key' :content_length => File.size('myfile.txt') ) do |buffer| File.open('myfile.txt') do |io| buffer.write(io.read(length)) until io.eof? end end

u otra opción en los documentos de aws ruby sdk , en "Streaming a file from disk":

 File.open('/source/file/path', 'rb') do |file| s3.put_object(bucket: 'bucket-name', key: 'object-key', body: file) end
over 4 years ago · Santiago Trujillo Denunciar

0

Tienes dos problemas:

  1. ¿Tiene comas al final de sus asignaciones de variables en object_uploaded? que están afectando la forma en que se almacenan sus variables. Retire estos.
  2. Debe hacer referencia al archivo como un tipo de objeto de archivo, no como una ruta de archivo. Me gusta esto:
 image = File.open("#{Rails.root}/tmp/cosn_img.jpeg")

Vea el código completo a continuación:

 def object_uploaded?(image, s3_client, bucket_name, object_key) response = s3_client.put_object( body: image, acl: "public-read", bucket: bucket_name, key: object_key ) puts response if response.etag return true else return false end rescue StandardError => e puts "Error uploading object: #{e.message}" return false end def run_me image = File.open("#{Rails.root}/tmp/cosn_img.jpeg") bucket_name = 'cosn-images' object_key = "#{order_number}-trello-pic_#{list_config[:ac_campaign_id]}.jpeg" region = 'us-west-2' s3_client = Aws::S3::Client.new(region: region) if object_uploaded?(image, s3_client, bucket_name, object_key) puts "Object '#{object_key}' uploaded to bucket '#{bucket_name}'." else puts "Object '#{object_key}' not uploaded to bucket '#{bucket_name}'." end end
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda