класс ActiveStorage::Service
Сервис Active Storage
Абстрактный класс, выступающий в качестве интерфейса для конкретных сервисов.
Доступны следующие сервисы:
-
Diskдля управления вложениями, сохранёнными непосредственно на жёстком диске. -
GCSдля управления вложениями с помощью Google Cloud Storage. -
S3для управления вложениями с помощью Amazon S3. -
Mirrorдля управления вложениями с помощью нескольких сервисов.
В приложении Rails можно настроить сервисы с помощью созданного файла config/storage.yml и указать одну из упомянутых выше констант в ключе service. Например:
local:
service: Disk
root: <%= Rails.root.join("storage") %> Чтобы узнать, какие ключи необходимы, ознакомьтесь с конструктором сервиса.
Затем в конфигурации приложения можно указать используемый сервис следующим образом:
config.active_storage.service = :local
Если вы используете Active Storage вне приложения Ruby on Rails, настроить используемый сервис можно следующим образом:
ActiveStorage::Blob.service = ActiveStorage::Service.configure(
:local,
{ local: {service: "Disk", root: Pathname("/tmp/foo/storage") } }
)
Атрибуты
Открытые методы класса
# File activestorage/lib/active_storage/service.rb, line 52 def configure(service_name, configurations) Configurator.build(service_name, configurations) end
Настраивает сервис Active Storage по имени на основе набора конфигураций, обычно загружаемых из файла YAML. При запуске приложения движок Active Storage использует этот метод, чтобы задать глобальный сервис Active Storage.
Открытые методы экземпляра
# File activestorage/lib/active_storage/service.rb, line 96
def compose(source_keys, destination_key, filename: nil, content_type: nil, disposition: nil, custom_metadata: {})
raise NotImplementedError
end Объединяет несколько файлов в один «составной» файл.
# File activestorage/lib/active_storage/service.rb, line 101 def delete(key) raise NotImplementedError end
Удаляет файл по key.
# File activestorage/lib/active_storage/service.rb, line 106 def delete_prefixed(prefix) raise NotImplementedError end
Удаляет файлы по ключам, начинающимся с prefix.
# File activestorage/lib/active_storage/service.rb, line 82 def download(key) raise NotImplementedError end
Возвращает содержимое файла по key.
# File activestorage/lib/active_storage/service.rb, line 87 def download_chunk(key, range) raise NotImplementedError end
Возвращает часть содержимого файла в диапазоне байтов range по key.
# File activestorage/lib/active_storage/service.rb, line 111 def exist?(key) raise NotImplementedError end
Возвращает true, если файл существует по key.
# File activestorage/lib/active_storage/service.rb, line 143
def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:, custom_metadata: {})
{}
end Возвращает Hash заголовков для запросов url_for_direct_upload.
# File activestorage/lib/active_storage/service.rb, line 91 def open(*args, **options, &block) ActiveStorage::Downloader.new(self).open(*args, **options, &block) end
# File activestorage/lib/active_storage/service.rb, line 147 def public? @public end
# File activestorage/lib/active_storage/service.rb, line 78 def update_metadata(key, **metadata) end
Обновляет метаданные файла, идентифицированного по key в сервисе. Переопределяйте метод в подклассах только в том случае, если сервису необходимо хранить специальные метаданные, которые нужно обновлять после идентификации.
# File activestorage/lib/active_storage/service.rb, line 71 def upload(key, io, checksum: nil, **options) raise NotImplementedError end
Загружает io по указанному key. Если указан checksum, сервис проверит совпадение после завершения загрузки или вызовет исключение ActiveStorage::IntegrityError.
# File activestorage/lib/active_storage/service.rb, line 119
def url(key, **options)
instrument :url, key: key do |payload|
generated_url =
if public?
public_url(key, **options)
else
private_url(key, **options)
end
payload[:url] = generated_url
generated_url
end
end Возвращает URL файла по key. Для общедоступных файлов возвращается постоянный URL, а для закрытых — временный. Для закрытых файлов можно указать disposition (:inline или :attachment), filename и content_type, с которыми файл будет предоставляться по запросу. Кроме того, можно указать срок действия URL в секундах, заданный в expires_in.
# File activestorage/lib/active_storage/service.rb, line 138
def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:, custom_metadata: {})
raise NotImplementedError
end Возвращает подписанный временный URL, на который можно отправить PUT-запрос для прямой загрузки файла в key. URL будет действителен в течение количества секунд, указанного в expires_in. Также необходимо указать content_type, content_length и checksum загружаемого файла. Сервис проверит все эти атрибуты при загрузке.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.