Jump to content

[Resolvido] Download de Ficheiro do Mysql


batistavn15

Recommended Posts

Boas pessoal, tenho uma grande duvida e precisava da vossa ajuda, tenho ficheiros na BD mysql, no phpmyadmin, e é o seguinte quando realizo o download o ficheiro em .txt vem com códigos em vez do conteudo que estava lá dentro, e um ficheiro .pdf diz que o ficheiro foi danificado. Agradecia imenso a vossa ajuda, pois é de um estado urgente.

Páginas:

Adicionar ficheiro:

<?php
require("dbconnect.inc.php");
$arquiivo = $_FILES['arquivo']['tmp_name'];
$tamanho = $_FILES['arquivo']['size'];
$tipo = $_FILES['arquivo']['type'];
$nome = $_FILES['arquivo']['name'];
$titulo = $_POST['titulo'];
if ( $arquivo != "none" )
{
 $nome = $_FILES['arquivo']['name'];
 $arquiivo = $_FILES['arquivo']['tmp_name'];
 $fp = fopen($arquivo, "r");
 $conteudo = fread($fp, filesize($tamanho));
 $conteudo = addslashes($conteudo);
 fclose($fp);
 if(!get_magic_quotes_gpc())
 {
 $nome = addslashes($nome);
 }

 $qry = mysql_query ("INSERT INTO arquivos VALUES ('','$nome','$titulo','$conteudo','$tamanho', '$tipo')");


 if(mysql_affected_rows($conn) > 0)
   print "O arquivo foi gravado na base de dados.";
 else
   print "Não foi possível gravar o arquivo na base de dados.";
}
else
 print "Não foi possível carregar o arquivo para o servidor.";

?>

Mostrar ficheiros:

!-- ...código anterior -->
<form enctype="multipart/form-data" action="guardar_arquivo.php" method="post">
Descricao <input type="text" name="titulo" size="30">
Arquivo <input type="file" name="arquivo">
<input type="submit" value="Enviar arquivo">
</form>
<!-- ...código posterior -->
<tbody>
<?php
require("dbconnect.inc.php");
$qry = "SELECT * FROM arquivos";
$res = mysql_query($qry);
while($fila = mysql_fetch_array($res))
{


 echo "<tr>";
 echo "<td>". $fila['titulo']."</td>";

 ?>
 <td><a href="baixar_arquivo.php?nid=<?php echo $fila['id']; ?>">Fazer Download</a></td>

 <?php
}
?>
</tbody>

Para download:

<?php
require("dbconnect.inc.php");
$id = @($_GET["nid"]);

if($id != "") {

 $result = mysql_query("select nome, conteudo, tamanho, tipo From arquivos where id='$id'") or die('Error, query failed');
 list($name, $titulo, $conteudo, $size, $type) = mysql_fetch_array($result);
 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
 echo $conteudo;
}
else{

}

?>

Link to comment
Share on other sites

  • Replies 42
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Reparei que o teu código é idêntico a: http://mirificampress.com/permalink/saving_a_file_into_mysql, mas faltam-te aí passos. O problema deve estar na introdução do ficheiro na base de dados.

Por acaso não foi a fonte que segui

isso não responde à minha questão, nem de perto nem de longe ...

Então não percebi a questão

Edited by batistavn15
Link to comment
Share on other sites

UTF-8 Sem BOM

ok ... vamos ver se o problema é do addslashes:

 // $conteudo = addslashes($conteudo);
 $conteudo = base64_encode($conteudo);
 $qry = mysql_query ("INSERT INTO arquivos VALUES ('','$nome','$titulo','$conteudo','$tamanho', '$tipo')");

 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
//  echo $conteudo;
 echo base64_decode($conteudo);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

testas então isto:

<?php
// apaga tudo antes do "<?php" mesmo os espaços !!!

require("dbconnect.inc.php");
$id = @($_GET["nid"]);

if($id != "") {

 $result = mysql_query("select nome, conteudo, tamanho, tipo From arquivos where id='$id'") or die('Error, query failed');
 list($name, $titulo, $conteudo, $size, $type) = mysql_fetch_array($result);
/*
 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
 echo $conteudo;
*/
}
else{

}

// apaga tudo depois do "?>" mesmo os espaços !!!
?>

e diz se aparece alguma coisa ou se resposta tem mesmo conteúdo (usa os development tools do teu browser)

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

$result = mysql_query("select nome,        <----------- 1
                             conteudo,    <----------- 2
                             tamanho,     <----------- 3
                             tipo         <----------- 4
                        From arquivos where id='$id'") or die('Error, query failed');

list($name,                             // <----------- 1
    $titulo,                           // <----------- 2
    $conteudo,                         // <----------- 3
    $size,                             // <----------- 4
    $type)                             // <----------- 5
   = mysql_fetch_array($result);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.