MySQL : Stocker un fichier dans une base de données
Par Méthylbro le dimanche 15 novembre 2009, 08:00 - Tutoriels - Lien permanent
Techniquement il est tout à fait possible de stocker des fichiers directement au sein d'une base de données.
Cependant peut de développeurs se risquent à ce genre de pratique. Il est vrai que si l'on maîtrise mal certains aspects, ou s'il on en demande trop à cette technique cela peut vite se révéler être un véritable calvaire.
Néanmoins je reste intimement convaincu que dans certains cas et pour des besoins raisonnables il peut être fort agréable de pouvoir stocker des fichiers directement au sein d'une base de données.
Cette semaine je vous propose une série de billets qui va vous permettre de comprendre comment réaliser une telle chose. Mais je vais également essayer de vous amener à bien appréhender les risques et les limites d'une telle pratique ce qui vous permettra de mieux envisager sur quel projet cela peut ou ne peut pas se faire.
Les Objets Larges Binaires (BLOB)
Pour stocker nos fichiers au sein de notre base de données nous allons utiliser un type de données que les néophytes découvriront sans doutes pour la première fois : les Objets Larges Binaires ou BLOB pour Binary Large Object.
Le BLOB est un type de donnée permettant le stockage d’informations sous forme binaire. On l’utilise le plus souvent pour stocker des fichiers en tout genre (images, sons ou videos …) directement dans le champ d'une table d'une base de données.
Pour notre exemple nous utiliserons MySQL comme système de gestion de base de données. Sachez que celui-ci propose plusieurs types différents d’objets larges qui ne diffèrent que par la taille maximale des données qu’ils peuvent stocker.
Parmi eux nous utiliserons le type LONGBLOB car ce dernier propose la capacité maximale de stockage ; mais le choix du type à utiliser variera selon les cas que vous pourrez rencontrer lors d’une application pratique.
Création de la table
La première étape consiste donc à créer la table qui viendra stocker nos différents fichiers. Outre le nom du fichier et le contenu même du fichier, nous conserverons également le type de fichier (« image/jpeg » pour une image par exemple) et la date de la dernière modification du fichier.
Ces informations supplémentaires nous seront utiles par la suite pour envoyer des en-têtes HTTP corrects au visiteurs ainsi que pour gérer un petit cache côté serveur.
CREATE TABLE `FILE` (
`name` varchar(255) NOT NULL,
`type` varchar(255) NULL,
`updated_date` timestamp NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`data` longblob NULL,
PRIMARY KEY (`name`)
)TYPE=MyISAM;
Un champ de fichier dans PHPMyAdmin
Une fois que vous aurez créer votre table avec la requête SQL CREATE TABLE ci-dessus, vous vous apercevrais sans doutes que PHPMyAdmin vous proposera un formulaire d’insertion un peut particulier.
En effet, vous verrez apparaître un champ d’envoi de fichier pour la valeur data. Comme vous pouvez le voir donc, notre champ data est bien destiné à recevoir un fichier.
Dans un prochain article ; nous verrons comment enregistrer des fichiers au sein de cette table directement depuis un script PHP.

Commentaires