sql >> Base de Datos >  >> RDS >> Mysql

Cargar un documento de Word, almacenarlo en mysql y mostrarlo

Hay algunos temas para discutir aquí.

El formulario

Para cargar el archivo, cambie el atributo enctype del formulario.

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

Almacenamiento del archivo

Puede almacenar el archivo en una base de datos, o simplemente como archivo en el sistema de disco del servidor. Independientemente de lo que elija, no es necesario dividir el archivo en sus líneas. Guarde el archivo como una sola unidad.

Lea esta entrada que analiza el tema.

Debería bastar con decir aquí que el campo de su base de datos debe ser del tipo y tamaño apropiados para contener el archivo.

Personalmente, soy fanático de almacenar el archivo en el disco y el nombre del archivo en la base de datos.

Manejo de carga de archivos

Puede guardar el archivo en algún lugar del disco. Esta no es la mejor forma de hacerlo, pero sí la más sencilla de demostrar. Hay suficientes ejemplos en SO, por ejemplo Cómo cargar y guardar archivos con el nombre deseado

 $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);

Descargando el archivo Para que el archivo se muestre y se descargue, simplemente imprima el contenido en el navegador.

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

Esto mostrará el archivo y probablemente confundirá al navegador. Para indicarle al navegador que maneje el archivo como un documento de Word, debe enviar los encabezados apropiados al navegador antes de enviar el archivo.

    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();