Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/12/2018, 22:47
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Descarga de archivos mysql - archivo dañado

Te dejo una guía

file table

Código SQL:
Ver original
  1. CREATE TABLE files(
  2.     id INT NOT NULL AUTO_INCREMENT,
  3.     name VARCHAR(100) NOT NULL,
  4.     cont BLOB,
  5.     PRIMARY KEY(id)
  6. )

list.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $server = ["server"=>"localhost", "user"=>"root", "pass"=>"", "db"=>"test"];
  4.  
  5. $con = new mysqli($server["server"], $server["user"], $server["pass"], $server["db"]);
  6. if (!$con->connect_errno) {
  7. $q = $con->query("SELECT * FROM files");
  8.     if($q->num_rows > 0){
  9.     ?>
  10.     <table>
  11.         <tr>
  12.             <td>Name</td>
  13.             <td>Size</td>
  14.             <td>Link</td>
  15.         </tr>
  16.         <?php
  17.         while($file = $q->fetch_assoc()){
  18.         echo "<tr>";
  19.             echo "<td>".$file["name"]."</td>";
  20.             echo "<td>".round(strlen($file["cont"])/1024, 2)." Kb</td>";
  21.             echo "<td><a href=\"download.php?id=".$file["id"]."\">Download</a></td>";
  22.         echo "</tr>";
  23.         }
  24.         ?>
  25.     </table>
  26.     <?php
  27.     }
  28.     else{
  29.     echo "No files";
  30.     }
  31. }
  32. else{
  33. echo "DB ERROR";
  34. }
  35. ?>

download.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. $server = ["server"=>"localhost", "user"=>"root", "pass"=>"", "db"=>"test"];
  4.  
  5. function my_is_int($i){
  6.     try{
  7.     intval($i);
  8.     return true;
  9.     }
  10.     catch(Exception $e){
  11.     return false;
  12.     }
  13. }
  14.  
  15. $id = -1;
  16. if(isset($_GET["id"]) && my_is_int($_GET["id"])) $id = intval($_GET["id"]);
  17.     if($id != null){
  18.     $con = new mysqli($server["server"], $server["user"], $server["pass"], $server["db"]);
  19.         if (!$con->connect_errno) {
  20.         $q = $con->query("SELECT * FROM files WHERE id=$id");
  21.             if($q->num_rows > 0){
  22.             $file = $q->fetch_assoc();
  23.             header("Content-Type: application/octet-stream");
  24.             header("Content-Transfer-Encoding: Binary");
  25.             header("Content-disposition: attachment; filename=\"" .$file["name"]. "\"");
  26.             header("Content-length: ".strlen($file["cont"]));
  27.             echo $file["cont"];
  28.             exit();
  29.             }
  30.         }
  31.     }
  32. echo 0; //send a 0 if some error...
  33. ?>

upload.php

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. function myfread($file){
  5.     if(file_exists($file)){
  6.     $fo = fopen($file,"r");
  7.     $cnt = fread($fo, filesize($file));
  8.     fclose($fo);
  9.     return $cnt;
  10.     }
  11. return "";
  12. }
  13.  
  14. $server = ["server"=>"localhost", "user"=>"root", "pass"=>"", "db"=>"test"];
  15.  
  16. $con = new mysqli($server["server"], $server["user"], $server["pass"], $server["db"]);
  17. if (!$con->connect_errno) {
  18.     if(isset($_FILES["file"])){
  19.     $f = $_FILES["file"];
  20.     $st = $con->prepare("INSERT INTO files (name, cont) VALUES (?, ?)");
  21.     $st->bind_param("ss", $f["name"], myfread($f["tmp_name"]));
  22.         if ($st->execute())
  23.             echo "uploaded";
  24.         else
  25.             echo "some error occurred";
  26.     }
  27.     else{
  28.     ?>
  29.     <form method="post" action="" enctype="multipart/form-data">
  30.     <input type="file" name="file"/><input type="submit" value="upload" />
  31.     </form>
  32.     <?php
  33.     }
  34. }
  35. else{
  36. echo "DB ERROR";
  37. }
  38. ?>