Mysql
 sql >> Base de données >  >> RDS >> Mysql

Télécharger un document word, le stocker sur mysql et l'afficher

Il y a quelques sujets à discuter ici.

Le formulaire

Pour télécharger le fichier, modifiez l'attribut enctype du formulaire.

<form action="insert.php" method="post" enctype="multipart/form-data">
    :
</form>

Stocker le fichier

Vous pouvez stocker le fichier dans une base de données ou simplement en tant que fichier dans le système de disque du serveur. Quoi que vous choisissiez, il n'est pas nécessaire de diviser le fichier en ses lignes. Stockez le fichier en tant qu'unité unique.

Lire cette entrée qui traite du sujet.

Il devrait suffire de dire ici que votre champ de base de données doit être d'un type et d'une taille appropriés pour contenir le fichier.

Personnellement, je suis fan du stockage du fichier sur disque et du nom du fichier sur la base de données.

Gestion du téléchargement de fichiers

Vous pouvez enregistrer le fichier quelque part sur le disque. Ce n'est pas la meilleure façon de procéder, mais la plus simple à démontrer. Il y a suffisamment d'exemples sur SO, par exemple Comment télécharger et enregistrer des fichiers avec le nom souhaité

 $info = pathinfo($_FILES['upload']['name']);
 $ext = $info['extension']; // get the extension of the file
 $newname = "newname.".$ext; 

 $target = 'mydocs/'.$newname;
 move_uploaded_file( $_FILES['upload']['tmp_name'], $target);

Téléchargement du fichier Pour afficher et télécharger le fichier, imprimez simplement le contenu dans le navigateur.

ob_start();
 // do things. See below
ob_clean();
flush();
readfile($file);
ob_flush();

Cela affichera le fichier et confondra probablement le navigateur. Pour dire au navigateur de traiter le fichier comme un document Word, vous devez envoyer les en-têtes appropriés au navigateur avant d'envoyer le fichier.

    ob_start();
    if(isset($_REQUEST['dlink']))
    {
        $file = $_REQUEST['dlink'];
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
         exit;
    }
ob_flush();