[SOLUCIONADO]No puedo ver ni descargar imagenes bytea

Buenos días, estoy teniendo un problema con las imágenes guardadas como bytea en una base de datos Postgres 9.1, para un proyecto hecho en toba 2.3. En mi equipo de desarrollo, bajo ubuntu 13.10 funciona perfecto, puedo guardar las imágenes en la base de datos y puedo a acceder (Descargar) a ellas e incluso ver la vista previa en el sistema; el problema se da cuando paso a producción este sistema, en un servidor que corre bajo Windows 7, todo el sistema funciona correctamente, excepto esta sección de las imágenes. Si observo la carpeta temporal del proyecto, en donde descargo temporalmente la imagen para su vista, me crea el archivo, pero si quiero abrirlo con el visor de imágenes de windows ya me arroja un error, igualmente si quiero acceder a la URL de la imagen, me tira el icono de error para imágenes, inclusive no puedo ver la vista previa de la imagen. He revisado los permisos de las carpetas, y están OK. Adjunto el código que utilizo para la lectura de las imágenes, tener en cuenta que es un multilinea, en la que cada imagen tiene la opción de agregar una observación.

function get_cen_viviendaximagenes()
	{
		$datos = $this->dep('dr_viviendas')->tabla('dt_cen_viviendaximagenes')->get_filas();
		$i=0;
		foreach ($datos as $elem) {
			$fp_imagen = $this->dep('dr_viviendas')->tabla('dt_cen_viviendaximagenes')->get_blob("imagen", $elem['x_dbr_clave']);
			if (isset($fp_imagen)) {
				//-- Se necesita el path fisico y la url de una archivo temporal que va a contener la imagen
				$temp_nombre = 'img' . $elem['id_viviendaximagenes'].'.jpg';
				$temp_archivo = toba::proyecto()->get_www_temp($temp_nombre);
					   
				//-- Se pasa el contenido al archivo temporal
				$temp_fp = fopen($temp_archivo['path'], 'w');
				stream_copy_to_stream($fp_imagen, $temp_fp);
				fclose($temp_fp);
				$tamano = round(filesize($temp_archivo['path']) / 1024);
								  
				//-- Se muestra la imagen temporal
				$enlace="<a href='{$temp_archivo['url']}'>Descargar</a>";
				$elem['imagen'] =$enlace;
				$elem['vista_previa'] = "<img src='{$temp_archivo['url']}' alt='retert' WIDTH=200 HEIGHT=200>";
			} else {
				$elem['imagen'] = null;
			}
			$datos[$i]=$elem;
			$i=$i+1;
		} 
		return $datos;
	}

Desde ya muchas gracias por la ayuda. Saludos.

Una vez me paso, y era porque no reconocía los nombres con caracteres especiales como tildes, por lo tanto al momento de la carga y descarga limpio dichos caracteres.

No se si es el mismo caso, por lo tanto ensaya con archivos que no contengan dichos caracteres.

Saludos

jorozco, estuve viendo este dato que me decís, sospechaba de eso también, pero esta todo OK, aparentemente no es el problema.

Hola Facundo,

tene en cuenta dos cosas:

  • Windows tiene un maximo para la cantidad de entradas por directorio segun el sistema de archivos… y hasta donde recuerdo no era muy alto.

  • Te fijaste si se trata de algun bug de la version particular de postgres?.. a esta altura deberia ser un know issue de ser asi y probablemente tambien exista un workaround en ese caso.

Saludos

Buenos días Richard, disculpa la demora en la respuesta, estuve trabajando en otro proyecto y suspendí este. El tema de la cantidad de directorios esta OK, no pasa ese limite, inclusive en el largo del nombre. Al momento no es un know issue de la versión de postgres, la pregunta es de que otro problema puede tratarse. En mi PC de desarrollo corriendo bajo Ubuntu 13.10 funciona perfecto, cuando lo paso al servidor de producción me arroja este error.

Buenos días, estoy haciendo una serie de pruebas, deje la extensión del archivo como png, si trabajo en ubuntu funciona perfecto, inclusive funciona si corro el sistema desde ubuntu conectándome la base de datos instalada en un servidor windows. Otro detalle que me di cuenta, y por ahí ayuda, es que me duplica el tamaño del archivo original si opero bajo windows (base de datos + sistema), si lo hago en ubuntu (base de datos + sistema) se mantiene el tamaño del archivo. Desde ya muchas gracias. Saludos.

Hola Facundo,

ok, entonces podriamos descartar a postgres como causante del problema en ppio. Sera quizas algun inconveniente con pdo bajo Win 7?, por ponerte un ejemplo sencillo… recuperar la cantidad de filas modificadas no funciona correctamente bajo windows.

Esto es algo que se reporto hace rato… pero como se considero que no era un bug es probable que no se haya cambiado nada. Fijate por ahi sirve de algo.

Otro detalle que me di cuenta, y por ahí ayuda, es que me duplica el tamaño del archivo original si opero bajo windows (base de datos + sistema), si lo hago en ubuntu (base de datos + sistema) se mantiene el tamaño del archivo.

No deberia hacerlo… el tema es, no se estara exportando 2 veces concatenado?. El por que hace eso, es otro tema… pero al menos saber que esta pasando.

Saludos

Buenos días gente, escribo para comentarles que en el enlace que menciona Richard explican este problema, se soluciona (tal como dice ahí) ejecutando la siguiente consulta “ALTER DATABASE foo SET bytea_output TO ‘escape’;”. Esto fue necesario en un servidor corriendo bajo Windows Server 2008 R2 Standard SP1 64 bits, Postgres 9.1.6 y PHP 5.3.13, simplemente se ejecuta esa sentencia y Voilá!. Gracias por la ayuda y lo dejo por si se le presenta el problema a alguien mas. Saludos.