Я был в состоянии иметь клиентов сторонних загружать файлы непосредственно в AWS s3, а затем обработать эти файлы с скрепкой с помощью следующей строки в модели:как назначить скрепку подать на AWS с помощью AWS SDK
my_object.file_attachment = URI.parse(URI.escape(my_bucket.s3.amazonaws.com/whatever.ext))
Эта строка загружает файл, обрабатывает его, а затем сохраняет его соответствующим образом. Проблема в том, что для того, чтобы эта строка работала, я должен предоставить анонимные привилегии чтения для места загрузки. Поэтому мой вопрос: как этого избежать? Моя мысль заключается в использовании AWS-SDK для загрузки файла - так что я пытался вещи, как:
file = Tempfile.new('temp', :encoding => 'ascii-8bit')
bucket.objects[aws_key].read do |chunk|
file.write chunk
end
my_object.file_attachment = file
и вариации на эту тему, но ничего не работает до сих пор. Любые идеи были бы наиболее полезными.
Решение Я не очень доволен
Вы можете создать временный привилегированного URL с помощью AWS SDK:
s3 = AWS::S3.new
bucket = s3.buckets['bucket_name']
my_object.file_attachment = bucket.objects['relative/path/of/uploaded/file.ext'].url_for(:read)
Я просто ударил об этом сегодня. Вероятно, это объясняет, почему я получаю 403 Запрещенные ошибки. Вы когда-нибудь находили решение? Я не могу разрешить анонимное чтение, и у PaperClip уже есть учетные данные для чтения/записи. –
@MarkBerry смотри edit to OP – laertiades
Удивительный! Спасибо. Я обновил SDK 2 и опубликую как ответ. –