2009-08-21 4 views
0

Je veux que les utilisateurs téléchargent des fichiers via ma webapp Je développe PHP en utilisant MySql dans le backend. Je veux stocker les fichiers dans la base de données. Je suis confronté à des problèmes en le faisant. En outre, une fois le fichier stocké dans une base de données, comment allons-nous le télécharger, l'afficher correctement dans la webapp (le type de fichier, et d'autres attributs du fichier).télécharger un fichier dans une base de données MySql avec PHP

J'utilise une forme comme:

<FORM METHOD="post" ACTION="fileUpload.php" ENCTYPE="multipart/form-data">
<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="3000000">
<INPUT TYPE="hidden" NAME="action" VALUE="upload">
<TABLE BORDER="1"> <TR> <TD>Description: </TD> <TD><TEXTAREA NAME="txtDescription" ROWS="10" COLS="50"> </TEXTAREA></TD> </TR> <TR> <TD>File: </TD> <TD><INPUT TYPE="file" NAME="binFile"></TD> </TR> <TR> <TD COLSPAN="2"><INPUT TYPE="submit" NAME="Upload" VALUE="Upload"></TD> </TR> </TABLE> </FORM>

mais quand je le soumets et j'imprimer le tableau $ _POST je reçois: Array ([MAX_FILE_SIZE] => 3000000 [action] => télécharger [txtDescription] => jassfhjabsf [Upload] => Upload)

Je n'arrive pas à comprendre où le contenu du fichier "binFile" est perdu. Quelqu'un peut-il m'aider s'il vous plaît?

Cordialement, Mayank.

Répondre

4

Vous voudrez peut-être jeter un oeil à la section de téléchargement du manuel PHP: Handling file uploads; il serait probablement un bon début ;-)

Par exemple, vous pouvez voir que les informations de fichiers sont en magasin $_FILES, et non $_POST (voir POST method uploads) - au moins, compte tenu de votre exemple, je suppose que vous êtes la recherche du fichier dans $_POST, et non $_FILES.

dans votre cas, compte tenu du champ de saisie est nommé « binFile », vous auriez probablement envie d'utiliser var_dump(ou tout équivalent) sur $_FILEs['binFile'], pour voir ce qui est à l'intérieur ;-)

Ensuite, vous pouvez utiliser is_uploaded_file et move_uploaded_file pour travailler avec le fichier lui-même. Ensuite, êtes-vous sûr de vouloir stocker le contenu du fichier dans la base de données, et non sur le disque, ne stockant dans DB que le chemin d'accès au fichier? A ce sujet, vous pouvez jeter un oeil à cette question et à ses réponses: Storing Images in DB - Yea or Nay? - ce n'est pas spécifique à PHP, mais les idées devraient toujours être vraies.

Peut-être Where to store uploaded files (sound, pictures and video) pourrait aider aussi ;-)
même au sujet Storing a small number of images: blob or fs?, et/ou Store pictures as files or in the database for a web app?

+0

Merci beaucoup Pascal! :) Oui, je suis sûr que je veux stocker dans la base de données et pas dans FS car je dois maintenir la cartographie de certains mappages entre les utilisateurs et les fichiers téléchargés par eux w.r.t. un paramètre. Maintenir la structure du répertoire sera difficile et fastidieux alors que DB résout mon problème lui-même. – mkamthan

+0

Oh, d'accord. Merci pour l'explication! –

+0

Bonjour Pascal, Je suis maintenant capable d'insérer des fichiers dans la base de données, mais les fichiers d'une taille supérieure à 1 Mo ne sont pas insérés dans la base de données. J'utilise un LONGBLOB comme type de données de la colonne dans laquelle je sauvegarde le fichier. Pouvez vous me donner un coup de main? Cordialement, Mayank. – mkamthan

1

Le fichier GOES téléchargement dans le répertoire de téléchargement.

Vous pouvez obtenir le nom du fichier en regardant dans $_FILES['binFile']['tmp_name']

Vous devez faire quelque chose avec le fichier avant que le script est terminé, sinon le serveur Web le supprimer. Vous devez lire le contenu du fichier et le placer dans votre colonne BLOB.

1

il est dans le répertoire tmp, jusqu'à ce que vous déplacez

$userfile = $_FILES['binFil']['tmp_name']; 
move_uploaded_file($userfile , "somedir"); 

Afterwords vous devez détecter quel type il est avec quelque chose comme

$userfileExt = array_pop(explode(':', $userfile)); 
Questions connexes