Bem vindo ao SOS Designers

Faça o seu cadastro gratuito no Portal SOS Designers e tenha um acesso personalizado.

Empresas

Cadastre gratuitamente suas vagas, crie sua propria Lista de Curriculos Favoritos, e tenha um acesso personalizado.

Usuarios

Cadastre gratuitamente seu curriculo, crie sua propria Lista de Noticias Favoritas e tenha um acesso personalizado.

Área de Empresas | Vagas

Área de acesso a empresas cadastradas que desejam postar vagas de empregos no Portal e pesquisar curriculos.

Cadastre-se gratuitamente
Esqueceu a sua senha?

Área de Usuarios | Curriculos

Área do Usuario que deseja cadastrar seu curriculo e pesquisar vagas.



Cadastre-se gratuitamente
Esqueceu a sua senha?


Redes Sociais
Siga o Portal SOS Designers no Twitter Siga o Portal SOS Designers no Facebook

PHP


Você está aqui: Home » PHP » Armazenando arquivos zip, mp3, xls, etc no banco de dados

Armazenando arquivos zip, mp3, xls, etc no banco de dados


Pesquisar no Portal SOS Designers





Tempo Real



Participe da Comunidade SOS Designers

Siga o SOS Designers








SOS Designers

Você já se perguntou “Como armazeno arquivos no banco de dados ao invés de armazenar um endereço de localização?”. A resposta é bem simples, basta usar o tipo BLOB (Binary Large Objects) no campo de sua tabela. Campos do tipo BLOB podem armazenar praticamente qualquer tipo de dados, desde um arquivo .txt até um arquivo .mp3.

Quando um arquivo é armazenado no banco de dados usando um campo do tipo BLOB, ele é convertido para binário, não podendo ser alterado diretamente no banco, a não ser que seja enviado novamente.

Em se tratando de MySQL, existem quantro variações do tipo BLOB, cada uma com sua limitação de armazenamento, conforme mostrado abaixo:

tinyblob = tamanho máximo de 255 caracteres

blob = tamanho máximo de 65535 caracteres

mediumblob = tamanho máximo de 16777215 caracteres

longblob = tamanho máximo de 4294967295 caracteres

Para este tutorial iremos utilizar o tipo “mediumblob”, mas você deve escolher aquele que se adequa melhor à sua necessidade.

Para começar a trabalhar, vamos criar o banco de dados, que se chamará ‘tutorial_manipblob_db”. Você pode criar usando o phpmyadmin ou qualquer outro SGBD de sua escolha.

Após criar o banco de dados, vamos criar a tabela que se chamará “arquivos”. Para isso, basta rodar a instrução SQL a seguir:

CREATE TABLE arquivos(    id int not null auto_increment primary key,    nome varchar(50),    titulo varchar(50),    conteudo mediumblob,    tipo varchar(50) );

Com estrutura de banco de dados para armazenamento das informações criada, chegou a hora de começar a escrever um pouco de código e fazer tudo funcionar.

Serão criado 4 arquivos:

index.php – formulário para envio do arquivo

gravar.php – gravará o arquivo no banco de dados

listar.php – listará os registros armazenados no banco de dados

baixar.php – fará o download do arquivo, ou abrirá o mesmo no browser

Criando o arquivo index.php

Nesse arquivo está o código html do formulário responsável por enviar o arquivo para o servidor, para que seja armazenado no banco de dados.

<html> <head>  <title>Armazenado arquivos no banco de dados</title> <head> <body> <form enctype="multipart/form-data" action="gravar.php" method="post"> <label>Descrição</label> <input type="text" name="titulo" size="30"> <label>Arquivo</label> <input type="file" name="arquivo"> <input type="submit" value="Enviar arquivo"> </form> </body>  </html>


Importante!

Sempre que um formulário for fazer envio de arquivos, ele precisa ter a propriedade “enctype” setada como “multipart/form-data”, senão o arquivo não será enviado.


Criando o arquivo gravar.php

Esse é o responsável por fazer a gravação dos dados do arquivo e do próprio arquivo no banco de dados.

 <?php //Faz a conexão com o banco de dados (troque usuário e senha pelos dados de acesso ao seu banco de dados) $conn = mysql_connect("localhost","usuario","senha"); mysql_select_db("tutorial_manipblob_db");  //Extrai as informações do arquivo para serem armazenadas em seus respectivos campos na tabela do banco de dados $arquiivo = $_FILES['arquivo']['tmp_name']; $tamanho = $_FILES['arquivo']['size']; $tipo    = $_FILES['arquivo']['type']; $nome  = $_FILES['arquivo']['name']; $titulo  = $_POST['titulo'];  //Verifica se foi enviado algum arquivo através do formulário if ($arquivo != "none"){ //Abre o arquivo enviado como somente leitura    $fp = fopen($arquivo, "rb");    //lê o conteúdo do arquivo e o armazena em uma variável    $conteudo = fread($fp, $tamanho);    //insere uma  antes de ', " e /    $conteudo = addslashes($conteudo);    //fecha o arquivo    fclose($fp);    //Instrução SQL para inserir os dados do arquivo e o próprio arquivo no banco de dados    $qry = "INSERT INTO arquivos VALUES (0,'".$nome."','".$titulo."','".$conteudo."','".$tipo."')";    //Executa a instrução criada na linha acima    mysql_query($qry);    //Verifica se os dados foram armazenados no banco de dados    if(mysql_affected_rows($conn) > 0){       //Se foram, então informa sobre a gravação e exibe um link para a lista com os dados armazenados no banco de dados       echo "O arquivo foi gravado na base de dados.<br/><br/>";       echo "<a href="listar.php">Veja os arquivos armazenados clicando aqui.</a>";    }else       //Se não foi feita a gravação, então informa que não foi possível gravar       echo "Não foi possível gravar o arquivo."; }else    //Se não foi enviado nenhum arquivo pelo formulário, então informa ao usuário    echo "Não foi possível carregar o arquivo."; ?>

Criando o arquivo listar.php

Esse arquivo irá exibir uma lista com as informações de cada registro do banco de dados e um link para o download do arquivo.


<?php
//Conexão com o banco de dados $conn = mysql_connect("localhost","root",""); mysql_select_db("tutorial_manipblob_db"); //Instrução SQL para trazer todos os registros armazenados no banco de dados $qry = "SELECT id, nome, titulo, tipo FROM arquivos"; //Executa a instrução criada na linha acima $res = mysql_query($qry); //A execução da instrução SQL retornará um array, então será feito um loop por ele //para listar cada um dos registros retornados while($fila = mysql_fetch_array($res)){ //imprime na tela os dados do registro incluindo um link que aponta para o arquivo baixar.php //e uma variável id, que contém o código do registro no banco de dados, para que possa ser recuperado e baixado echo $fila['titulo']."<br/>".$fila['nome']."(".$fila['tipo'].")<br/><a href="baixar.php?id=".$fila['id']."">Fazer Download</a><br/><br/>"; } ?>

Criando o arquivo baixar.php

O arquivo baixar.php é o responsável pelo download do arquivo armazenado no banco de dados. Conforme o tipo de arquivo armazeado, ele poderá ser aberto no próprio browser ou então aberta uma tela para salvar o arquivo em disco.

<?php //Faz a conexão com o banco de dados $conn = mysql_connect("localhost","root",""); mysql_select_db("tutorial_manipblob_db"); //Instrução SQL que irá recuperar o arquivo selecionado $qry = "SELECT tipo, conteudo FROM arquivos WHERE id=".$_REQUEST['id']; //Executa a instrução SQL criada na linha acima $res = mysql_query($qry); //Passa à variável $tipo o tipo do arquivo $tipo = mysql_result($res, 0, "tipo"); //Passa à variável $conteudo o conteúdo, o arquivo propriamente dito $conteudo = mysql_result($res, 0, "conteudo"); //Adiciona o cabeçalho para o tipo de arquivo armazenado, //para que o browser possa interpretá-lo corretamente header("Content-type: $tipo"); //Imprime na tela o conteúdo do arquivo ou abre uma tela para gravar em disco. echo $conteudo; ?>

Com isso foi criado um simples sistema para armazenamento de arquivos em banco de dados, usando PHP, MySQL e o tipo de dados BLOB.

Clique aqui e faça o download dos fontes para estudo.

Em caso de dúvidas, esclarecimentos, sugestões ou elogios, deixe nos comentários, que responderei o mais breve possível.

 

Sobre o Colunista:

Jonathan Lamim


Profissão: Web Developer

Descrição: Jonathan Lamim trabalha com desenvolvimento web/desktop desde 2005, porém abandonou o desenvolvimento desktop em 2006 para se dedicar somente ao desenvolvimento web. Atualmente é programador da Fivecom - Soluções em web 2.0, editor do blog jlamim.com.br e graduando em Sistemas de Informação na UNISA.

Deixe seu comentário:





© Copyright 2002-2014
Portal SOS Designers
Webmaster: Luiz Antonio Bovi