Загрузка изображений на удаленный сервер

28 нояб. 2012 г., 14:13:50
Просмотры: 25.7K
Голосов: 14

Я использую WordPress Media Uploader для загрузки изображений и хотел бы узнать, есть ли способ настроить загрузку на мой удаленный сервер вместо локального? Пример: Мой блог WordPress размещен на Сервере A, и я хочу использовать медиа-загрузчик для загрузки изображений на Сервер B вместо Сервера A.

Оба сервера работают на Ubuntu 10.04 LTS с веб-сервером nginx, и оба поддерживают ftp и sftp.

4
Комментарии

Какие у вас есть варианты подключения к серверу? FTP, API или ssh? на сервере, где вы хотите хранить ваш контент

Pontus Abrahamsson Pontus Abrahamsson
2 янв. 2013 г. 15:35:08

Мои единственные варианты подключения к серверу - это FTP и SSH

Ruriko Ruriko
3 янв. 2013 г. 02:56:48

Используйте плагин hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/

saman m saman m
12 авг. 2018 г. 22:10:19

Я понимаю, что автор указал, что доступ к API невозможен, однако на большинстве доступных сайтов новый WordPress API всегда доступен. Поскольку это старая ветка, я подумал, что стоит упомянуть это для других посетителей. Например, если у вас есть доступ к сайту, вы обычно можете получить доступ к API. Примеры, касающиеся медиа: https://developer.wordpress.org/rest-api/reference/media/

ryanm ryanm
2 окт. 2018 г. 19:00:02
Все ответы на вопрос 4
2
16

Я только что создал плагин, который делает это. Он не идеален, но выполняет свою работу.

Вы можете найти его на моем Github: https://github.com/pontusab/wp-ftp-media-library

Вам нужно изменить некоторые параметры в файле на строке 28:

/**
     * Измените эти параметры в соответствии с вашим сервером
     * Вам нужно изменить только те, что помечены (*)
     * Если помечено (-), это необязательно 
     */

    $settings = array(
        'host'    =>    'ip или hostname',         // * хост FTP-сервера
        'user'    =>    'username',                 // * пользователь FTP
        'pass'    =>    'password',                 // * пароль FTP
        'cdn'     =>    'cdn.example.com',          // * Это должно быть доменное имя или поддомен, указывающий на корень загрузок
        'path'    =>    '/',                        // - путь FTP, по умолчанию корень (/). Измените здесь и добавьте директорию на FTP-сервере,
        'base'    =>    $upload_dir['basedir']      // Базовая директория на локальной машине 
    );

Что делает этот плагин: он меняет структуру загрузки с /год/месяц на загрузку только на локальную машину, в нашем случае Сервер А. Затем он использует PHP для подключения к FTP через: ftp_connect. Функция срабатывает при выполнении wp_generate_attachment_metadata. Затем она проверяет в папке загрузки, есть ли там изображения, и если да, то загружает их все на FTP-сервер через ftp_put. После завершения загрузки файлы удаляются с локальной машины с помощью функции unlink.

Затем плагин меняет URL изображений на "публичный" IP или доменное имя, указывающее на FTP-сервер. Я рекомендую использовать что-то вроде static.mydomain.com или cdn.mydomai.com. Они должны быть направлены на FTP-сервер (Сервер B), что позволит вам загружать изображения с FTP-сервера.

Как уже говорили другие участники, вам не стоит использовать FTP-сервер для этого, лучше использовать настоящий CDN, подключенный через FUSE или что-то вроде Amazon S3.

3 янв. 2013 г. 19:15:36
Комментарии

это сработало отлично, загрузка проходит нормально, но появилась ошибка Warning: ftp_put() [function.ftp-put]: Не удалось создать файл. в /home/xxx..../plugin_file.php на строке 99

Fatih Toprak Fatih Toprak
23 июн. 2013 г. 13:12:10

@Pontus Abrahamsson, Спасибо за это отличное решение. Однако, как я могу отключить автоматическую отправку всех медиафайлов с сервера на другой сервер? Я хочу, чтобы только что загруженные файлы передавались через ftp.

user3605780 user3605780
17 авг. 2016 г. 11:58:11
1

Это звучит так, будто вам просто нужно использовать CDN. Большинство CDN работают следующим образом: вы загружаете изображения локально, и они зеркалируются на серверах CDN. Затем вы настраиваете домен, который указывает на контент CDN, и переписываете URL-адреса изображений, чтобы они использовали этот домен вместо обычного URL.

Существует несколько хороших плагинов и сервисов, хотя у меня есть опыт работы только с W3TC и Cloudfront.

3 янв. 2013 г. 22:35:05
Комментарии

Да, это похоже на CDN, за исключением того, что на Сервере A недостаточно места, так как там всего 5ГБ, а на Сервере B — 1ТБ пространства.

Ruriko Ruriko
4 янв. 2013 г. 02:34:10
0

Вам необходимо понять, как WordPress загружает файл. POST-запрос отправляет файл на сервер, где он временно сохраняется в папке. После этого WordPress проверит загруженный файл, скопирует его в директорию контента и удалит временный файл.

Это очень сложный процесс. Для изображений вы можете использовать хук 'media_upload_file', затем проверить, является ли файл изображением. Если это изображение, скопируйте его с помощью WP_Filesystem на внешний сервер (используйте метод ftpext и укажите свои FTP-данные в настройках), в противном случае позвольте WordPress обработать загрузку с помощью wp_handle_upload(). В случае копирования файла на внешний сервер вам необходимо предоставить URL и другие данные WordPress, чтобы он мог настроить данные (например, для записей вложений).

Эту задачу не решить парой строк кода. Если вы не разработчик, лучше наймите специалиста. Или найдите плагин, который сделает это за вас.

4 янв. 2013 г. 03:48:47
2
-1

Вы можете использовать SSHFS или FTPFS для монтирования удалённого каталога в качестве директории загрузок. Таким образом, вам не потребуется вносить изменения в сам WordPress.

Недостаток заключается в том, что каждый доступ к загруженным файлам будет медленнее, в зависимости от расположения сервера B.

3 янв. 2013 г. 07:08:31
Комментарии

Я не могу использовать SSHFS или FTPFS, потому что мой хостинг не поддерживает FUSE

Ruriko Ruriko
3 янв. 2013 г. 07:34:01

Тогда смените хостинг. Основная проблема с реализацией вашего запроса - не часть загрузки на другой сервер (можно просто скопировать код из плагинов, которые загружают на CDN), а как потом получать эти файлы для отдачи. Без доступа на уровне файловой системы к серверу B, Apache не сможет отдавать файлы, поэтому вам придется сделать сервер B доступным для веба, но тогда вы можете просто перенести WordPress туда. Вы действительно не предоставили достаточно деталей о вашей ситуации. Пожалуйста, обновите вопрос со всеми соответствующими деталями, если хотите получить ответ.

Mark Kaplun Mark Kaplun
3 янв. 2013 г. 09:34:19