AWS:: S3:: S3Object.url_for - Как это сделать с новым AWS SDK Gem?
Я использую это навсегда с помощью paperclip и aws-s3:
def authenticated_url(style = nil, expires_in = 90.minutes)
AWS::S3::S3Object.url_for(attachment.path(style || attachment.default_style), attachment.bucket_name, :expires_in => expires_in, :use_ssl => true)
end
В новом пакете paperclip используется жемчуг AWS-SDK, который прерывает это, вызывая ошибку:
undefined method `url_for' for AWS::S3:Class
Кто-нибудь знает, как заставить этот метод работать с новым камнем AWS-SDK?
Ответы
Ответ 1
Чтобы сгенерировать URL-адрес с помощью aws-sdk gem, вы должны использовать метод AWS:: S3Object # url_for.
Вы можете получить доступ к экземпляру S3Object из приложения paperclip с помощью # s3_object. Ниже приведен фрагмент ниже, чтобы решить вашу проблему.
def authenticated_url(style = nil, expires_in = 90.minutes)
attachment.s3_object(style).url_for(:read, :secure => true, :expires => expires_in).to_s
end
Ответ 2
Недавно я обновился до новейшего драгоценного камня для AWS SDK 2 для Ruby (aws-sdk-2.1.13), и в этой версии SDK изменился предварительный URL-адрес.
Способ получения:
presigner = Aws::S3::Presigner.new
presigner.presigned_url(:get_object, #method
bucket: 'bucket-name', #name of the bucket
key: "key-name", #key name
expires_in: 7.days.to_i #time should be in seconds
).to_s
Дополнительную информацию вы можете найти здесь:
http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Presigner.html
Ответ 3
После изучения документации, url_for - это метод экземпляра, а не метод класса.
Чтобы создать URL-адрес с помощью aws-sdk, вам необходимо сделать следующее:
bucket = AWS::S3::Bucket.new(attachment.bucket_name)
s3object = AWS::S3::S3Object.new(bucket, attachment.path(style || attachment.default_style))
s3object.url_for(:read, :expires => expires_in)
Параметры немного отличаются от указанных вами.
Параметры Хэш (параметры):
: expires (Object) - Устанавливает время истечения срока действия URL-адреса; после этого S3 вернет ошибку, если используется URL. Это может быть целое число (указать количество секунд после текущего времени), строку (которая анализируется как дата с использованием анализа времени #), объект Time или DateTime. Эта опция по умолчанию устанавливается на один час после текущего времени.
: secure (String) - Создать ли безопасный URL (HTTPS) или простой URL-адрес HTTP.
: response_content_type (String) - Задает заголовок Content-Type ответа при выполнении HTTP GET на возвращаемом URL.
: response_content_language (String) - Задает заголовок Content-Language ответа при выполнении HTTP GET на возвращаемом URL.
: response_expires (String) - Устанавливает заголовок Expires ответа при выполнении HTTP GET на возвращаемом URL.
: response_cache_control (String) - Устанавливает заголовок Cache-Control ответа при выполнении HTTP GET на возвращаемом URL.
: response_content_disposition (String) - Устанавливает заголовок Content-Disposition ответа при выполнении HTTP GET на возвращаемом URL.
: response_content_encoding (String) - Задает заголовок Content-Encoding ответа при выполнении HTTP GET на возвращаемом URL.
Ответ 4
Недавно я перешел с aws-s3 на aws-sdk. Я заменил все мои url_for следующим образом:
def authenticated_url(style = nil, expires_in = 90.minutes)
self.attachment.expiring_url(expires_in, (style || attachment.default_style))
end
Вы можете увидеть обсуждение в разделе проблем скрепки: https://github.com/thoughtbot/paperclip/issues/732
Ответ 5
http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html#public_url-instance_method