2015-02-18 24 views
9

Rails uygulamasında, müşteri RMA gönderim etiketlerini oluştururken S3 grubuna kaydediyorum. Sadece aws-sdk geminin V2'sine güncelledim ve şimdi ACL'yi ayarlamak için kodum çalışmıyor. V1.X çalışmışACL ile AWS S3'e dosya yükleme public_read konumuna ayarlandı public_read

Kodu:

# Saves label to S3 bucket 
    s3 = AWS::S3.new 
    obj = s3.buckets[ENV['S3_BUCKET_NAME']].objects["#{shippinglabel_filename}"] 
    obj.write(open(label.label('pdf').postage_label.label_pdf_url, 'rb'), :acl => :public_read) 

.write kaldırılmıştır görünüyor, bu yüzden şimdi .put kullanıyorum. ACL'yi ayarlamaya çalıştığım durumlar dışında her şey çalışıyor. V2.0

Yeni kod:

# Saves label to S3 bucket 
    s3 = Aws::S3::Resource.new 
    obj = s3.bucket(ENV['S3_BUCKET_NAME']).object("#{shippinglabel_filename}") 
    obj.put(Base64.decode64(label_base64), { :acl => :public_read }) 

Bir Aws::S3::Errors::InvalidArgument hata alıyorum, ACL işaret etti.

+0

Tam hata iletisinin nedir? – dgilperez

+0

Aws :: S3 :: Hatalar :: InvalidArgument iletinin büyük kısmıdır. Konsol sadece obj.put hattındaki Modelime işaret ediyor. Bu yararlı olurdu eğer bir ekran görüntüsü gönderebilirsiniz. – bnzelener

+0

Hakikatin formatı veya izin verilmemesi gibi bir hatanın ipuçlarından biri olup olmadığını merak ediyordum. Telaşa gerek yok. – dgilperez

cevap

15

Bu kod benim için çalışıyor:

photo_obj = bucket.object object_name 
photo_obj.upload_file path, {acl: 'public-read'} 

böylece dize kullanmak gerekir 'kamu okunan' ACL için. Bunu, object.rb dosyasında bir örnek görerek buldum.

+1

Siz rock - teşekkürler! Alt çizgi yerine sadece bir tire olduğuna inanamıyorum. Bu yüzden aslında eski API'ye geri döndüm - ama şimdi nasıl yükseltileceğini biliyorum. Teşekkürler! – bnzelener

+0

Ack! Aynı burada - ben de bir alt çizgi vardı. Hatamı yakalamadan resmi dokümanları üç kez kontrol ettim! –

+0

yep, tire çalışıyor, * teşekkür ederim *. Python/boto3 kullanıyorum ve aynı problemi çözdüm, şimdi çoğunlukla çözüldü. MIME tipi hala sorun, ama ben anlamaya çalışıyorum. –