Я использую активное хранилище с amazon- aws, а срок службы service_url составляет максимум 1 неделю после истечения срока его действия и выдает ошибку «Отказано в доступе».
Это код, который я скопировал с .rvm/gems/ruby-2.6.4/gems/activestorage-6.0.2.1/lib/active_storage/service/s3_service.rb:68
def url(key, expires_in:, filename:, disposition:, content_type:)
instrument :url, key: key do |payload|
generated_url = object_for(key).presigned_url :get, expires_in: expires_in.to_i,
response_content_disposition: content_disposition_with(type: disposition, filename: filename),
response_content_type: content_type
payload[:url] = generated_url
generated_url
end
end
, чтобы заставить его жить вечно. Я переопределил следующий код
def url(key, expires_in:, filename:, disposition:, content_type:)
instrument :url, key: key do |payload|
generated_url = object_for(key).public_url
payload[:url] = generated_url
generated_url
end
end
Это работает, но проблема в том, что расположение всегда inline
content_type не является типом содержимого файла, это нормально, если я хочу показывать встроенные файлы (например, отображать PDF-файлы и изображения в кране браузера вместо загрузки), теперь, если я хочу, чтобы файлы загружались, добавляя content_type и content_disposition к URL, выдает ошибку «Отказано в доступе», для борьбы с этим я изменил приведенный выше код следующим образом
def url(key, expires_in:, filename:, disposition:, content_type:)
instrument :url, key: key do |payload|
if disposition == :inline
generated_url = object_for(key).public_url
payload[:url] = generated_url
generated_url
else
generated_url = object_for(key).presigned_url :get, expires_in: 1.week.to_i,
response_content_disposition: content_disposition_with(type: disposition, filename: filename),
response_content_type: content_type
payload[:url] = generated_url
generated_url
end
end
end
и это решило мою проблему всего за одну неделю, я подумал, смогу ли я восстановить service_url fre sh после его истечения. кто-нибудь может мне помочь?
для создания встроенного файла Я использую что-то вроде record.service_url
для создания загружаемого URL record.service_url(disposition: :attachment)