Subir imágenes a servidor remoto

28 nov 2012, 14:13:50
Vistas: 25.7K
Votos: 14

Estoy usando el cargador de medios de WordPress para subir imágenes y me preguntaba si hay alguna manera de hacer que suba al servidor remoto en lugar de mi servidor local. Por ejemplo: Mi blog de WordPress está alojado en el Servidor A y quiero usar el cargador de medios para subir imágenes al Servidor B en lugar del Servidor A.

Ambos servidores ejecutan Ubuntu 10.04 LTS con nginx como servidor web y ambos soportan FTP y SFTP.

4
Comentarios

¿Cuáles son tus opciones para conectarte al servidor? ¿FTP, API o SSH? en el servidor donde deseas almacenar tu contenido

Pontus Abrahamsson Pontus Abrahamsson
2 ene 2013 15:35:08

Mis únicas opciones para conectarme al servidor son FTP y SSH

Ruriko Ruriko
3 ene 2013 02:56:48

Usa el plugin hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/

saman m saman m
12 ago 2018 22:10:19

Entiendo que el OP indicó que el acceso a la API no es una opción, sin embargo en la mayoría de sitios accesibles la nueva API de WordPress siempre está disponible. Como este es un hilo antiguo, pensé en mencionarlo para otros visitantes. Por ejemplo, si puedes acceder al sitio web, normalmente puedes acceder a la API. Ejemplos relacionados con medios: https://developer.wordpress.org/rest-api/reference/media/

ryanm ryanm
2 oct 2018 19:00:02
Todas las respuestas a la pregunta 4
2
16

Acabo de construir un plugin que hace esto. No es perfecto pero cumple su función.

Puedes encontrarlo en mi Github: https://github.com/pontusab/wp-ftp-media-library

Así que necesitas cambiar algunas cosas dentro del archivo en la línea 28:

/**
     * Cambia esto para que coincida con tu servidor
     * Solo necesitas cambiar los marcados con (*)
     * Si están marcados con (-) son opcionales 
     */

    $settings = array(
        'host'    =>    'ip o nombre del host',     // * el nombre del host del servidor ftp
        'user'    =>    'usuario',                  // * usuario ftp
        'pass'    =>    'contraseña',               // * contraseña ftp
        'cdn'     =>    'cdn.ejemplo.com',          // * Esto tiene que ser un dominio o subdominio apuntado a la raíz de las subidas
        'path'    =>    '/',                        // - ruta ftp, por defecto es raíz (/). Cambia aquí y añade el directorio en el servidor ftp,
        'base'    =>    $upload_dir['basedir']      // Directorio base local 
    );

Lo que hace este plugin es cambiar la estructura de subida de /año/mes para solo subir localmente en nuestra máquina, en este caso Servidor A. Luego usa php para conectarse al ftp mediante: ftp_connect. La función se ejecuta cuando wp_generate_attachment_metadata corre. Luego realiza una comprobación en la carpeta de subidas para ver si hay imágenes, si es así las subirá todas al servidor ftp mediante ftp_put. Cuando la subida se completa, los archivos se eliminan de la máquina local usando la función unlink.

Luego el plugin cambia la url de las imágenes a la ip "pública" o nombre del host apuntando al servidor ftp. Sugiero usar algo como static.midominio.com o cdn.midominio.com. Necesitan estar apuntados al servidor ftp (Servidor B) esto te permite cargar las imágenes desde el servidor ftp.

Como dicen otros miembros, no deberías usar un servidor ftp para esto, es mejor con un CDN real, montado por fuse o algo como Amazon S3.

3 ene 2013 19:15:36
Comentarios

eso funcionó genial, la carga está bien pero obtuve un error Advertencia: ftp_put() [function.ftp-put]: No se pudo crear el archivo. en /home/xxx..../plugin_file.php en la línea 99

Fatih Toprak Fatih Toprak
23 jun 2013 13:12:10

@Pontus Abrahamsson, Gracias por esta gran solución. Sin embargo, ¿cómo puedo desactivar que comience a enviar cada archivo multimedia del servidor al otro servidor? Solo quiero que un archivo recién subido sea transferido vía FTP.

user3605780 user3605780
17 ago 2016 11:58:11
1

Suena casi como si solo quisieras usar una CDN. La forma en que funcionan la mayoría de las CDN es que cargas tus imágenes localmente, y estas se reflejan en la ubicación de la CDN. Luego configuras un dominio que apunta al contenido de la CDN y reescribes las URLs de tus imágenes para usar ese dominio en lugar de tu URL normal.

Existen varios buenos plugins y servicios, aunque solo tengo experiencia con W3TC y Cloudfront.

3 ene 2013 22:35:05
Comentarios

Sí, es similar a CDN, excepto que no tengo suficiente espacio en el Servidor A porque solo tiene 5GB mientras que el Servidor B tiene 1TB de espacio.

Ruriko Ruriko
4 ene 2013 02:34:10
0

Debes entender cómo WordPress sube un archivo. Una solicitud POST envía el archivo al servidor donde se almacenará en una carpeta temporal. Después de eso, WordPress verificará el archivo subido, lo copiará en el directorio de contenido y eliminará el archivo temporal.

Este es un proceso muy complejo. Para imágenes, puedes engancharte al hook 'media_upload_file', luego verificar si es una imagen. Si es una imagen, cópiala con WP_Filesystem al servidor externo (usa el método ftpext y proporciona tus credenciales FTP dentro de las opciones), de lo contrario deja que WordPress maneje la subida con wp_handle_upload(). En caso de copiar el archivo a un servidor externo, debes proporcionar la URL y demás a WordPress, para que pueda configurar los datos (por ejemplo, para posts de adjuntos).

Este trabajo no se hace con un puñado de código. Si no eres desarrollador, mejor contrata a uno. O busca un plugin que haga esto por ti.

4 ene 2013 03:48:47
2
-1

Puedes utilizar SSHFS o FTPFS para montar un directorio en el servidor remoto como tu directorio de subidas. De esta manera no necesitarás cambiar nada en WordPress.

La desventaja es que cada acceso a los archivos subidos será más lento dependiendo de dónde se encuentre el servidor B.

3 ene 2013 07:08:31
Comentarios

No puedo usar SSHFS o FTPFS porque mi host no soporta FUSE

Ruriko Ruriko
3 ene 2013 07:34:01

Entonces cambia de host. El mayor problema con implementar tu solicitud no es la parte de subida al otro servidor (solo copia código de plugins que suben a CDN), sino cómo obtener los archivos desde allí para servirlos. Sin acceso a nivel de sistema de archivos al servidor B, Apache no podrá servir los archivos, por lo que tendrás que hacer que el servidor B sea accesible desde la web, pero entonces podrías simplemente mover tu WordPress allí. Realmente no proporcionaste suficientes detalles sobre tu situación. Por favor actualiza la pregunta con todos los detalles relevantes si quieres tener la oportunidad de obtener una respuesta.

Mark Kaplun Mark Kaplun
3 ene 2013 09:34:19