Hero

Forma simple de salvar una imagen externa en Drupal

Octubre 29, 2013

estebanvalerioh

Se ha preguntado si existe alguna forma de guardar una imagen externa dentro de nuestro sitio de Drupal?

Acá muestro una forma de hacerlo:

1- Copiar función en nuestro módulo

La siguiente función se encarga de obtener una imagen desde un URL externo y guardarla en un directorio custom que estoy llamando ’external_images’ que vamos a tener en nuestro sitio. Por lo tando copiamos y pegamos en nuestro módulo.

/**
 * Get a file using drupal_http_request and to store it locally.
 *
 * @param string $url
 *   URL of external image.
 *
 * @return Object
 *   Drupal file Object of new saved image.
 */
function save_external_image($url) {

  // Name of custom directory.
  $directory = file_build_uri('external_images');

  // If our directory doesn't exist and can't be created, use the default.
  if (!file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) {
    $directory = NULL;
  }

  // Attempts to get a file using drupal_http_request and to store it locally.
  $image = system_retrieve_file($url, $directory, TRUE);

  return $image;
}

2- Utilizar función

Ahora simplemente llamamos a la función, pasando un URL externo correspondiente a una imagen y listo. Lo vemos en el siguiente ejemplo:

// URL of external image.
$url = 'http://pixabay.com/static/uploads/photo/2013/10/27/11/15/breithorn-201354_640.jpg?i';

save_external_image($url);

Una vez que la imagen se almacenó correctamente, la función devuelve un objeto que Drupal generó, con esta información:

stdClass Object
(
    [fid] => 2
    [uri] => ../assets/external_images/breithorn-201354_640.jpg
    [filename] => breithorn-201354_640.jpg
    [filemime] => image/jpeg
    [uid] => 1
    [status] => 1
    [timestamp] => 1383063800
    [filesize] => 83921
)

3- Comprobar que el archivo se guardó

Ahora nada más queda verificar que la imagen se guardó correctamente, se va a guardar una imagen dentro del directorio que se encuentra en el siguiente path: /sites/default/files/external_images, como vemos a continuación:

external image

Espero les sea de mucha utildad!

Saludos!

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.