Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

529
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda