O BLOB!
Fevereiro 15, 2009

A parte mais interessante nas cadeiras que possuem parte prática é sem dúvida a parte em que metemos as “mãos na massa”! E não, não estou a falar de culinária… Com efeito, é com os trabalhos práticos que aprendemos e apreendemos melhor os conceitos que nos ensinaram ao longo do semestre e criar do zero uma aplicação numa dada linguagem de programação é sempre um desafio interessante (a maior parte das vezes pelo menos!).
Ora com o trabalho da cadeira de Base de Dados foi-nos proposto que criássemos um sistema web-based que consistia num repositório multimédia inserido num contexto hospitalar. A aplicação deveria permitir a gestão e visualização de ficheiros relacionados com exames de diagnóstico médico, ficheiros esses de vários tipos incluindo vídeos! Para tal e tal como nos foi pedido, utilizamos o motor de base de dados Oracle e para os ficheiros de maior tamanho foi usado o tipo BLOB! Assim nasceu o MEDEX, criado através da interacção de PHP com Oracle.
O BLOB (Binary Large Object) é um tipo especial do Oracle que permite armazenar ficheiros com grande quantidade de dados. Porém a parte de visualizar os ficheiros inseridos na base de dados com este tipo, revelou-se algo complicada uma vez que existe pouca informação de como lidar com estes ficheiros mais complicados, como é o caso dos vídeos. A seguir demonstro como resolvemos esta situação em particular. Algumas partes serão no entanto omitidas pelo simples facto de apenas querer mostrar como se lida com a visualização de vídeos armazenados com o tipo BLOB, sem entrar no contexto do trabalho que é muito mais complexo e abrangente ,como decerto compreenderão. De notar que o código mostrado abaixo está em PHP. Para mais informações, quer sobre o tipo BLOB, quer sobre a utilização do PHP com o Oracle, poderão consultar a informação disponível aqui.
Porque achámos ser a melhor maneira de o fazer, utilizámos para a visualização, um player embebido na página (que podem encontrar aqui) que lê de uma pasta temporária o ficheiro de vídeo proveniente da base de dados. Assim sempre que um utilizador pretender visualizar um vídeo, é criada uma pasta temporária com o seu nome de utilizador, é descarregado o vídeo para essa pasta e depois quando o utilizador abandonar a página, a pasta é apagada.
Temos então:
$myblobid como identificador do nome do vídeo que queremos visualizar;
$myblobtipo como identificador do tipo de ficheiro que neste caso será “flv”.
A seguir mostra-se o código para descarregar o vídeo. Este é tratado como sendo um objecto:
$s = oci_parse ($c, “select DADOS from FICHEIROS where CODIGOFICHEIRO =’$myblobid‘”);
oci_execute($s, OCI_DEFAULT);
$res = oci_fetch_object($s);
$result = $res->DADOS->load();
Depois é criada a pasta temporária com o nome do utilizador e é guardado o ficheiro:
$user = $_SESSION['user']; // O nome do utilizador;
$location = “C:/…/” . $user . “/”; // A localização da pasta;
$filename = $myblobid.$myblobtipo; // Para ser usado no player;
$filepath=$location.$filename; // Para guardar o vídeo;
$file=fopen($filepath, ‘w’);
fwrite($file,$result);
fclose($file);
A seguir é então necessário invocar o player com o $filename criado:
echo ” <script type=’text/javascript’ src=’video/swfobject.js’></script>
<div id=’player’>Video</div>
<script type=’text/javascript’>
var so = new SWFObject(‘video/player.swf’,'mpl’,'470′,’320′,’9′);
so.addParam(‘allowscriptaccess’,'always’);
so.addParam(‘allowfullscreen’,'true’);
so.addParam(‘flashvars’,'&file=$user/$filename‘);
so.write(‘player’);
</script>”;
E pronto, se tudo correu bem, podem então visualizar o vídeo na vossa página web.
Boas programações!
Fevereiro 15, 2009 at 2:51 pm
Sim senhor, foi menino de nos dar uma bela carga de trabalhos esse BLOB.
Apesar disso, ficou um excelente trabalho ;D
Fevereiro 15, 2009 at 3:19 pm
Um excelente artigo! É bom saber que há trabalhos que são realmente úteis e nos ensinam algo!
Fevereiro 15, 2009 at 6:07 pm
Supostamente deveria saber isso, já que éramos do mesmo grupo e tal…
A guardar para os favoritos, simples mas bem explicado.