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

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.
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:
Outros artigos postados por este autor
- Gerando PDFs em PHP – Estilizando cabeçalho e rodapé
- Efeito Máscara no FLASH
- Gerando PDFs em PHP – As funções da biblioteca
- Localização de endereço através do CEP usando jQuery
- Programação Java para a Web
- Comprimindo arquivos JavaScript e CSS com GZIP
Artigos relacionados sobre PHP
- Evitando o roubo de imagens – Hotlink
- Busca no MySQL usando palavra-chave
- Gerando PDFs em PHP – Instalação e primeiras linhas de código
- Boleto Bancário em PHP ou ASP
- Implementando um tradutor de línguas no seu web site
- Cotação do Dólar
Parceiros
Tecnoponta
BR-Linux.org
Criar WEB
Orçamento de Sites
Venda de Site
Imóvel no Litoral Paulista
Montagens de Sites
Templates de Sites
Desenvolvedor de Sites
Elaboração de Sites
Produção de Sites
Programador de Sites
Criadores de Sites
Artigos mais acessados
Desenho de Letras - Construindo fontes TTF
Enviando email em formato HTML em PHP
Criando um sistema de login
Cargos e salários na área de informática
Menu Circular em 3D
Como fazer e modificar calendários
10 dicas de Webdesign para salvar seu site
Action Script 2.0 ( Primeira Parte )
Fireworks VS Photoshop
Criando gráficos com a classe JPGraph (parte 1)
Conceitos de Programação e ActionScript
Criação de Menu Deslizante através do DreamWaver
Serviços
Desenvolvimento de Sites e Sistemas WEB
Otimização de Sites (SEO)
Loja Virtual com Sistema Pagseguro
Sistema de Compra Coletiva
Catálogo de Produtos
Parcerias e Soluções de Publicidade
Portifólio Grupo SOS Designers
Fale Conosco







