Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Forzar descarga de Imagen

Estas en el tema de Forzar descarga de Imagen en el foro de PHP en Foros del Web. Hola; Necesito crear un botón que al oprimirlo se descargue una imagen a la pc. Busque en varios lugares, pero la mayoría no funciona correctamente. ...
  #1 (permalink)  
Antiguo 30/10/2015, 17:53
 
Fecha de Ingreso: octubre-2009
Ubicación: Santa Fe
Mensajes: 206
Antigüedad: 15 años, 1 mes
Puntos: 7
Forzar descarga de Imagen

Hola;

Necesito crear un botón que al oprimirlo se descargue una imagen a la pc. Busque en varios lugares, pero la mayoría no funciona correctamente. Los ejemplos que vi están hechos en php, no se si se puede hacer en java o jquery. si alguien sabe algo al respecto, estaré muy agradecido si lo comparte.

Desde ya muchas gracias!
__________________
Fondos de pantalla
Juegos Gratis
  #2 (permalink)  
Antiguo 30/10/2015, 18:03
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Forzar descarga de Imagen

Código PHP:
Ver original
  1. <a href="ruta de la imagen" download="rutadelaimagen"><img src="ruta de la imagen"/></a>


si es con un boton prueba asi:
Código HTML:
Ver original
  1. <button "ONCLICK="document.location='ruta/imagen.jpg'">Dercargar</button>

aunque el download es opcional ya que es mas usado para archivos
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 30/10/2015, 18:26
 
Fecha de Ingreso: octubre-2009
Ubicación: Santa Fe
Mensajes: 206
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Forzar descarga de Imagen

Gracias por tu respuesta xfxstudios, el problema es que en internet explorer no fuerza la descarga, simplemente abre la imagen en otra ventana. Necesito que función en todos los navegadores. necesito que función como en esta pagina. http://wallpaperswide.com/eden_nebula-wallpapers.html cuando haces clic en una resolución automáticamente aparece el dialogo de descarga.
__________________
Fondos de pantalla
Juegos Gratis
  #4 (permalink)  
Antiguo 30/10/2015, 18:50
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Forzar descarga de Imagen

No te queda de otra:

Los enlaces
Código HTML:
Ver original
  1. <a href="testb.php?file=1.jpg">Descargar</a>

El archivo unico php que va a procesar y a forzar la descarga:

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (!isset($_GET['file']) || empty($_GET['file'])) {
  4.  exit();
  5. }
  6. $root = $_SERVER['DOCUMENT_ROOT']."/imagenes/slider/";
  7. $file = basename($_GET['file']);
  8. $path = $root.$file;
  9. $type = '';
  10.  
  11. if (is_file($path)) {
  12.  $size = filesize($path);
  13.  if (function_exists('mime_content_type')) {
  14.  $type = mime_content_type($path);
  15.  } else if (function_exists('finfo_file')) {
  16.  $info = finfo_open(FILEINFO_MIME);
  17.  $type = finfo_file($info, $path);
  18.  finfo_close($info);
  19.  }
  20.  if ($type == '') {
  21.  $type = "application/force-download";
  22.  }
  23.  // Definir headers
  24.  header("Content-Type: $type");
  25.  header("Content-Disposition: attachment; filename=$file");
  26.  header("Content-Transfer-Encoding: binary");
  27.  header("Content-Length: " . $size);
  28.  // Descargar archivo
  29.  readfile($path);
  30. } else {
  31.  die("El archivo no existe.");
  32. }
  33.  
  34. ?>

si almacenas las imagenes en un solo directorio no tendras mucho rollo con la configuracion
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 30/10/2015, 18:50
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Forzar descarga de Imagen

error del capcha
__________________
[email protected]
HITCEL
  #6 (permalink)  
Antiguo 30/10/2015, 19:43
 
Fecha de Ingreso: octubre-2009
Ubicación: Santa Fe
Mensajes: 206
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Forzar descarga de Imagen

Ese mismo es el ejemplo que encontré pero no logro que funcione! Voy a seguir buscando!!
__________________
Fondos de pantalla
Juegos Gratis
  #7 (permalink)  
Antiguo 30/10/2015, 19:46
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Forzar descarga de Imagen

yo lo probe y funciona perfecto en todos los navegadores, hasta en ie, todo va a depender de como tienes estructurada tu consulta para traer los nombres de las imagenes, pero si funciona, analizalo y veras. ademas no hay nada que configurar, por ejemplo, en $root vas a colocar la ruta al directorio donde gusrdas las imagens y listo, es todo, el resto lo haces con los enlaces y es una manera segura de ejecutar tus descargas, o almenos una de las mas o menos seguras. Saludos
__________________
[email protected]
HITCEL
  #8 (permalink)  
Antiguo 01/11/2015, 17:21
 
Fecha de Ingreso: octubre-2009
Ubicación: Santa Fe
Mensajes: 206
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Forzar descarga de Imagen

Funciona perfecto, me estaba confundiendo en la ruta de las imágenes, estaba colocando la ruta completa.

En mi caso tengo las imágenes en directorios diferentes, que debería modificar para poder seguir usando el código?
__________________
Fondos de pantalla
Juegos Gratis
  #9 (permalink)  
Antiguo 01/11/2015, 19:29
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 5 meses
Puntos: 263
Respuesta: Forzar descarga de Imagen

podrias condicionar las rutas a una variable enviada, por ejemplo:

enlace con las dos variables:
Código HTML:
Ver original
  1. <a href="testb.php?file=1.jpg&rt=M">Descargar</a>

php que ejecuta la descarga:
Código PHP:
Ver original
  1. <?php
  2.  
  3. if (!isset($_GET['file']) || empty($_GET['file'])) {
  4.  exit();
  5. }
  6.  
  7. //rutas de las imagenes
  8. $CA = $_SERVER['DOCUMENT_ROOT']."/imagenes/slider/";
  9. $CB = $_SERVER['DOCUMENT_ROOT']."/imagenes/paisajes/";
  10. $CC = $_SERVER['DOCUMENT_ROOT']."/imagenes/personas/";
  11.  
  12. //verifico la variable que llega y defino la ruta de la descarga
  13. switch ($_GET['rt']) {
  14.   case 'M':
  15.   $ruta = $CA;
  16.   break;
  17.  
  18.   case 'MA':
  19.   $ruta = $CB;
  20.   break;
  21.  
  22.   case 'MB':
  23.   $ruta = $CC;
  24.   break;
  25.    
  26.   default:
  27.   $ruta = $CA;
  28. }
  29.  
  30. $root = $ruta;//asigno la ruta donde esta ubicada la imagen
  31. $file = basename($_GET['file']);
  32. $path = $root.$file;
  33. $type = '';
  34.  
  35. if (is_file($path)) {
  36.  $size = filesize($path);
  37.  if (function_exists('mime_content_type')) {
  38.  $type = mime_content_type($path);
  39.  } else if (function_exists('finfo_file')) {
  40.  $info = finfo_open(FILEINFO_MIME);
  41.  $type = finfo_file($info, $path);
  42.  finfo_close($info);
  43.  }
  44.  if ($type == '') {
  45.  $type = "application/force-download";
  46.  }
  47.  // Definir headers
  48.  header("Content-Type: $type");
  49.  header("Content-Disposition: attachment; filename=$file");
  50.  header("Content-Transfer-Encoding: binary");
  51.  header("Content-Length: " . $size);
  52.  // Descargar archivo
  53.  readfile($path);
  54. } else {
  55.  die("El archivo no existe.");
  56. }
  57.  
  58. ?>
__________________
[email protected]
HITCEL
  #10 (permalink)  
Antiguo 01/11/2015, 20:31
 
Fecha de Ingreso: octubre-2009
Ubicación: Santa Fe
Mensajes: 206
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Forzar descarga de Imagen

Un millón de gracias xfxstudios, funciona perfecto!!

Estoy trabajando con wordpress que ordena las imágenes por fecha de subida, asi que me va a funcionar de maravillas. Muchas gracias!!
__________________
Fondos de pantalla
Juegos Gratis

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:43.