Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ACDias

Postgre - Php - Imagem

Recommended Posts

Bem minha dúvida é a seguinte:Eu tenho meu banco e em uma tabela armazenarei imagens, nessa tabela tenho um campo do tipo bytea, que é onde a imagem ficará armazenada. O meu problema é que não sei qual o comando que uso para pegar a imagem que o usuário indicou através de um "<input type='file'..." e armazenar no banco. Alguém tem alguma sugestão de como resolver esse problema?Pensei em fazer upload da imagem, carregar a imagem através de um fopen e jogá-la no banco, mas não sei se funciona (não testei ainda) e acho que terá uma baixa performance.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, normalmente eu armazeno imagens apenas com o postgresql q eh um db mais robusto, gosto muito de armazenar imagens nele, e discordo com pessoas que dizem q não é legal,

Organiza mais os sistemas, não manipula arquivos importantes no ftp, e afinal, numa noticias, as imagens também são dados...

 

Muitos dos famosos HD virtuais existentes, trabalham com arquivos em bancos de dados...

 

 

Bom, pra guardar uma imagem no pg você faz assim: (recebendo os dados do formulario)

 

<?$arquivo = fopen($_FILES['arquivo']['tmp_name'],'r');$dados = fread($arquivo,filesize($_FILES['arquivo']['tmp_name']));$dados = addslashes($dados);$insert = "INSERT INTO imagens (imagem,tamanho,tipo) VALUES ('".$dados."','".$_FILES['arquivo']['size']."','".$_FILES['arquivo']['type']."')";(CONECTA-SE AO BANCO COM A SQL ACIMA)?>

 

Para puxar os dados:

 

<?$select = "SELECT * FROM imagens WHERE id = '1'";$resultado = $db->conecta_banco($select);$dados = pg_fetch_array($resultado);			 header("Content-type: ".$dados['tipo']);			 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");			 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");			 header("Pragma: Cache");echo stripcslashes($dados['imagem']);?>

 

PS: o campo IMAGEM deve ser do tipo BYTEA para este caso...;

RECOMENDO o campo tamanho como BIGINT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, vlw pelas respostas. Diêgo, era isso mesmo q eu queria. Tomás concordo com você q seria melhor e tornaria o banco menos pesado, mas tenho q armazenar elas no banco pq meu orientador me disse q seria melhor assim (não me lembro as razões q ele apontou, mas na época q estávamos desenvolvendo o DER eu concordei).Vlwt+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tomás, bom, concordo com sua tese em termos...

 

Seguinte, armazenar imagens pequenas em torno de 25k como BYTEA no pgsql, gera o mesmo comportamento de medios textos, ñão concordo com o armazenamento de grandes arquivos em bancos de dados como pqsql, porém, imagens para web, pequenas, não vão pesar o db mais que pesaria um texto do mesmo tamanho (25k) armazenado, isto por se tratar de um campo bytea, onde os dados são também gravados em forma de texto...

 

http://www.brflog.net

 

dêem uma olhada no meu fotolog, as imagens são gravadas no banco de dados... são tratadas, redimensionadas e optimizadas pelo script e jodas para o db, tenho o mesmo sistema trabalhando manipulando as imagens no ftp, no mesmo servidor, por enquanto naum vi nenhuma diferença, porém, qdo ouver alguma diferença mudarei com toda certeza o meu ponto de vista.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

header("Content-type: ".$dados['tipo']);header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Pragma: Cache");
Só uma dúvida Diego: esse trecho é mesmo necessário? pra q ele serve?

E eu não estou conseguindo mostrar a imagem! Segue o meu código:

$db = pg_connect("dbname=teste user=postgres password=postgresql");		$arquivo = fopen(addslashes($_FILES['img']['tmp_name']),'r');		$dados = fread($arquivo,filesize($_FILES['img']['tmp_name']));;		$dados = addslashes($dados);		fclose($arquivo);				$tipo = $_FILES['img']['type'];		$insert = "INSERT INTO images VALUES ('".$dados."','".$tipo."')";		if(!pg_query($insert))			echo"<br>$insert";		else			echo"sucesso";		pg_close();					$select = "SELECT * FROM images";		$db = pg_connect("dbname=teste user=postgres password=postgresql");		$resultado = pg_query($select);		$data = pg_fetch_array($resultado);		if(file_exists("teste.".$data['tipo']))			unlink("teste.".$data['tipo']);		$file = fopen("teste.".$data['tipo'],"w");		fwrite($file,stripslashes($data['img']));		fclose($file);		echo "<img src='teste.".$data['tipo']."'>";		pg_close();
Alguém pode me ajudar?

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri qual é o erro. A imagem não está sendo criada corretamente! Porém não sei onde está o erro no código! Alguém pode me esclarescer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.