2015-02-18 14 views
9

W mojej aplikacji Railsowej zapisuję etykiety wysyłki RMA klienta do wiadra S3 podczas tworzenia. Właśnie zaktualizowałem V2 klejnotu aws-sdk, a teraz mój kod do ustawiania listy ACL nie działa.Przesyłanie pliku do AWS S3 z ACL ustawionym na public_read

kod, który pracował w V1.X:

# 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 wydaje się być przestarzałe, więc używam .put teraz. Wszystko działa, z wyjątkiem sytuacji, gdy próbuję ustawić listę ACL.

Nowy kod V2.0:

# 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 }) 

pojawia się błąd Aws::S3::Errors::InvalidArgument, wskazał na ACL.

+0

Jaki jest pełny komunikat o błędzie? – dgilperez

+0

Aws :: S3 :: Błędy :: InvalidArgument jest dużą częścią wiadomości. Konsola po prostu wskazuje na mój Model na linii obj.put. Może opublikować zrzut ekranu, jeśli byłoby to pomocne. – bnzelener

+0

Zastanawiam się, czy to była jakaś wskazówka dotycząca błędu, na przykład format argumentu lub że nie jest dozwolony lub taki. Bez obaw. – dgilperez

Odpowiedz

15

Ten kod działa dla mnie:

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

więc trzeba użyć ciąg „publicznego odczytu” dla ACL. Znalazłem to, widząc przykład w object.rb

+1

Skała - dzięki! Nie mogę uwierzyć, że to był po prostu łącznik zamiast podkreślenia. Z tego powodu wróciłem do starego interfejsu API - ale teraz wiem, jak uaktualnić. Dzięki! – bnzelener

+0

Ack! To samo tutaj - miałem też podkreślenie. Dwukrotnie sprawdziłem oficjalne dokumenty trzy razy, nie zauważając mojego błędu! –

+0

tak, łącznik działa, * dziękuję *. Używam Python/boto3 i miałem ten sam problem, teraz w większości rozwiązany. nadal mam problem z typem mime, ale to wymyślę. –