Как загружать файлы напрямую в S3 без использования локального хранилища?
Я ищу плагин для WordPress, который позволит загружать файлы напрямую в Amazon S3, минуя локальное хранилище.
Мы - веб-студия, которая активно разрабатывает сайты на CMS совместно с клиентами. Это означает, что мы часто итерируем сайты, на которые клиенты загружают файлы. В наших проектах мы храним базу данных и код в git-репозитории, что упрощает перенос кода с продакшена на локальную среду разработки.
Проблема в том, что некоторые загружаемые клиентами файлы очень большие, и мы не хотим добавлять их в репозиторий, но при этом нам нужно иметь к ним доступ, как если бы они были у нас локально.
Поэтому я подумал, что вместо перемещения файлов мы могли бы использовать сторонний сервис для их хранения. Можно использовать Amazon S3 с плагином для резервного копирования, но я предпочел бы загружать файлы в S3 прямо через админ-интерфейс WordPress.
Вторая причина, по которой мне нужен такой плагин - мы размещаем блоги с 20-30 ГБ изображений в высоком разрешении. Хранить эти файлы на нашем сервере дорого, дешевле использовать для этого Amazon S3.
Итак, существует ли плагин, который позволяет использовать стандартный загрузчик медиафайлов WordPress, но при этом файлы будут загружаться напрямую в S3, минуя локальное хранилище?
Заранее благодарю за ответы!
У меня была такая же задача: на моем VPS не хватало места на диске, но я все равно хотел управлять фотографиями через WordPress. Плагин tantan-s3 не подошел, так как он сохраняет копию каждой фотографии локально.
Можно абстрагировать хранение файлов с помощью PHP stream wrappers, но некоторые части ядра WordPress несовместимы с этим. Поэтому короткий ответ: WordPress изначально не поддерживает достаточный функционал для реализации этого.
Продолжим: тикет WordPress #18543 посвящен исправлению ядра для поддержки stream wrappers в функциях imagejpeg()
(и других GD-функциях) и wp_mkdir_p()
.
Zend_Service_Amazon_S3_Stream предоставляет stream wrapper для S3, но он работает неэффективно, запрашивая по умолчанию по 8192 байта за раз вместо буферизации большего объема, что приводит к огромному количеству запросов. Я сидел на этом несколько месяцев, так что могу просто выпустить свои модификации в мир. Этот патч работает для Zend Framework 1.11.10.
Завершает картину плагин для преобразования пути загрузки в S3.
Я был бы рад, если бы кто-то развил эту идею дальше меня, но серьезный прогресс будет возможен только после улучшения поддержки stream в ядре WordPress.

Если у вас есть VPS, почему бы просто не подключить S3 bucket и не установить этот путь как директорию для загрузок?

@v0idless, отличный вопрос. Это не было бы переносимым решением, но я думаю, что такой подход сработает. Подключение бакета всё равно потребует плагина для преобразования URL от Адама. Я прав?

В настройках медиа WordPress есть возможность установить директорию для загрузок: Store uploads in this folder
, что должно подойти для подключенного бакета. Я думаю, плагин Адама добавляет протокол s3:// к пути загрузки для поддержки потоков.

@tarasm Я считаю, что фильтр pre_option_upload_url_path
является ключевым для пути загрузки.

Ознакомьтесь с плагином WP2Cloud. Загружаемые файлы не хранятся локально — они сразу отправляются в Amazon S3.
Кроме того, при желании вы можете использовать Amazon S3 для хранения всего содержимого сайта, а не только загружаемых файлов. Таким образом, вы навсегда решаете проблему резервного копирования и получаете гибкость в размещении сайта где угодно, без необходимости перемещения данных.

Был плагин под названием WP Read-Only, который загружал файлы на Amazon S3. Я использую его на своем сервере Heroku, потому что статические файлы нельзя хранить на сервере Heroku.

Попробуйте это: http://wordpress.org/extend/plugins/tantan-s3/ ^^

Существует плагин, который может решить эту задачу. Он позволяет загружать файлы напрямую в S3 из админ-панели WordPress или использовать шорткод для встраивания браузера S3 на фронтенд-страницы, чтобы пользователи могли загружать файлы в S3. Вы можете контролировать, кто может загружать, удалять, создавать папки и т. д. Это очень удобно.
Вот ссылка: WordPress S3 Browser
