Il m’a été demandé pour une application Web ASP.NET/C# de mettre en place un système de sauvegarde de fichier en Base de données. Ce n’est à mon humble avis pas le meilleur moyen de stocker des fichiers, mais ça peut toujours être utile quand on veut stocker des petits fichiers.
Stocker un fichier en Base de données
Le formulaire
En première étape, je vous montre le code ASP.NET pour créer votre espace d’envoie de fichier :
<asp:FileUpload ID="FileUploadIdentite" runat="server" /> <asp:ImageButton ID="BTNEnregistreDoc" OnClick="BTNEnregistreDoc_click"ToolTip="Enregistrer les modifications" runat="server" Text="Enregistrer" />
On un simple formulaire d’envoie de fichier tout simple.
Le schéma de base de données
Pour votre Base de données, insérez une colonne de type “varbinary(max)”. Ce type permet de stocker une chaîne de caractères binaires qui contiendra notre fichier “aplatit”.
ALTER TABLE <nom_table> ADD <nom_colonne> varbinary(max)
Récupérer le fichier et le stocker dans la base de données
protected void BTNEnregistreDoc_click(object sender, EventArgs e) { string pathDoc = "Mon/Dossier/de/stockage"; string FileName = FileUploaddoc.FileName; //On récupère le nom du fichier if (FileUploaddoc.HasFile) { FileUploadIdentite.SaveAs(pathDoc + FileName); //On enregistre le fichier (on pourra le supprimer ensuite) byte[] FichierBin = GetFichier(pathDoc + FileName); } //FichierBin est prêt à être enregistrer en BDD //FIX it : Requete insert du fichier (qui dépendra de votre système de gestion de vos données }
Voici la fonction vous permettant de transformer votre fichier en chaîne de caractères binaires :
private byte[] GetFichier(string filePath) { FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] fichier = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); return fichier; }
Requête SQL pour insérer votre fichier en BDD
sqlquery = @"INSERT INTO <nom_table> (<nom_colonne>) VALUE (" + fichier + ")";