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:
Espero les sea de mucha utildad!
Saludos!