Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENREGISTRER DES FICHIERS DANS UNE BASE DE DONNÉES ET LES RESTITUER


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : enregistrer, save, fichier, database, base Niveau : Initié Date de création : 08/07/2005 Date de mise à jour : 17/07/2005 01:08:19 Vu / téléchargé: 24 558 / 2 071

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
J'ai fait cette source suite à pas mal de questions sur le forum, pour par exemple comment afficher une image stockée dans une base de données, proposer un zip en telechargement etc...

Comment cela fonctionne ?

il y a une page upload.aspx qui permet comme son nom l'indique d'envoyer vers le serveur des images. Lorsque l'on clique sur le bouton j'ai quelques traitement qui permet de vérifier le type de l'image etc... puis ca va créer un nouveau object Fichier.

cet object Fichier, est une classe que j'ai faites, celui ci ne comporte aucun code, pour bien séparer les couches vous devriez mettre tous les objects de données dans un projet bien définit.

Ensuite une fois que mon object Fichier est créer, j'appelle la méthode AddFile en passant le fichier en paramètre, cette méthode se trouve dans une classe de la couche service qui elle aussi devrait se situer dans un autre projet. Cette méthode envoie le fichier dans la base de données, et renvoie l'id du fichier.

J'ai également une page fichierByID qui prend en paramètre l'id du fichier demandé. Celui ci va se charger d'afficher la requete, pour cela il va faire appel à la méthode GetFileByID de la couche service. une fois notre fichier recupéré, on va pouvoir soit l'afficher directement dans la page, et laisser le navigateur traiter ca, c'est par exemple le cas d'une photo ou un fichier PDF. On pourra également forcé le navigateur à telechargé le fichier, par exemple pour un zip.

c'est cette partie du code qui s'en occupe :

        'variable permettant de savoir si on force le telechargement ou pas, on peut par exemple
        'afficher directement une image
        Dim ForceDownload As Boolean = True

        'si le fichier comporte un de ces ContentType
        Dim ContentType As String = "jpeg|jpg|png|gif"
        For Each s As String In ContentType.Split("|")
            If oFichier.ContentType.IndexOf(s) > 0 Then
                Response.ContentType = oFichier.ContentType
                ForceDownload = False
                Exit For
            End If
        Next

        'on regarde si on a trouvé le contentType c'est à dire que c'est le navigateur qui s'occupe du fichier, sinon on force le download
        If ForceDownload Then
            System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" & id & "." & oFichier.Extension)
            Response.ContentType = "application/octet-stream"
        End If


J'ai fait ce code en utilisant Asp.net 2 il est donc possible que j'ai utilisé des fonctionalités nouvelles, mais normalement j'ai rien utilisé de completement nouveau, juste des petites astuce il sera donc trés facile d'adapter le code pour .net 1

voici le schéma de la base de donnée, il vous faudra donc créer une table et deux procédures pour utiliser mon exemple. Vous pouvez aussi regarder la capture pour voir a quoi ressemble la base de données

'
' Voici la table Table_Fichiers que vous devrez avoir pour utiliser cet exemple
'
'Column Name    type            Allow null
'-----------------------------------------
'FileID         int             Unchecked
'Guid         nvarchar(50) Unchecked
'ContentType text         Unchecked
'Length         int             Unchecked
'Fichier     varbinary(MAX) Unchecked
'Extension     nchar(10)     Unchecked
'
'
' Voici les deux procédures stockées utilisé pour ajouter et recuperer les données
'
'
'-- GetFileByID ----------------------------------------
'ALTER procedure [dbo].[GetFileByID]
'   (
'       @FileID int
'   )
'as
'
'SELECT Fichier, Length, ContentType, Extension, FileID
'FROM Table_Fichiers
'WHERE FileID = @FileID
'
'
'-- AddFile ---------------------------------------------
'ALTER procedure [dbo].[AddFile]
'   (
'       @Fichier varbinary(MAX),
'       @ContentType text,
'       @Length int,
'       @Guid char(50),
'       @Extension nchar(10)
'   )
'as
'
'INSERT INTO Table_Fichiers(Fichier, ContentType, Length, Guid, Extension)
'VALUES (@Fichier, @ContentType, @Length, @Guid, @Extension)
'
' -- permet de recuperer l'id de l'element qu'on vient de rajouter
'SELECT FileID FROM Table_Fichiers WHERE Guid = @Guid
'

Je tient à préciser que je connais trés peu SQL, mon code doit surement etre optimisable, si vous avez des suggestions dites le moi

 

Source

  • Il y a dans le zip 6 fichiers. Une image de la structure de la base de données (SQL 2005 dans mon cas, mais cela devrait fonctionner avec SQL 2000), une page de code comprenant 2 classes, ainsi que 2 pages avec les fichiers de code behind associé
Il y a dans le zip 6 fichiers. Une image de la structure de la base de données (SQL 2005 dans mon cas, mais cela devrait fonctionner avec SQL 2000), une page de code comprenant 2 classes, ainsi que 2 pages avec les fichiers de code behind associé

Conclusion

Vous avez pu remarquer que j'ai mis une GUID dans la base de données. vous pourrez vous servir de ceci en créant par exemple une nouvelle procédure stockée, une page FichierByGuid.aspx ceci est utile dans le cas ou voulez un peu de confidentialité, en effet il est trés aisé de recuperer un autre fichier contenu dans la bdd, en utilisant une guid cela sera plus compliqué, ceci ne procurera bien sur pas une confidentialité absolue, trés loin de la meme, mais ce sera un premier pas.


j'ai commenté le code je pense suffisament, si toutefois vous avez des problèmes besoin d'explication, dites le moi. N'hésitez pas non plus à me dire si vous avez des suggestions, bugs etc...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

08 juillet 2005 17:38:41 :
oublie du enctype="multipart/form-data" sur la balise form de l'upload
17 juillet 2005 01:08:19 :
MAJ

Commentaires et avis

signaler à un administrateur
Commentaire de sebmafate le 08/07/2005 09:26:17 administrateur CS

et en plus... c'est beau ;)

signaler à un administrateur
Commentaire de Azraelinou le 06/10/2006 11:41:30

Salut,

je dois dire que ta source m'a été trés utile, mais m'initiant à l'ASP ou plutot à web developpement, tu trouveras peut etre ma question stupide...

j'explique: apres avoir inseré, et donc rappelé l'image stockée dans ma BDD, je cherche maintenant a ne l'afficher que dans un contexte particulier en en l'occurence dans une balise (<DIV> ou <IMG>) pour faire en sorte que l'image puisse etre adaptée a son contenu et/ou son conteneur (exemple news avec une image en haut a gauche et le texte qui suit son orientation.

ce pourrait il que quelqu'un me montre comment m'y appliquer?

merci d'avance.

Johan

signaler à un administrateur
Commentaire de armand19841984 le 21/03/2007 11:32:36

ton code il est bien je cherchais a le faire justement mais bon tout est déja fait MERCI!! Mais le probleme moi jaime codé en C# et non en VB donc je vais tous traduire LOL sinon si tu la en C# ,fait nous signe

signaler à un administrateur
Commentaire de armand19841984 le 21/03/2007 13:26:55

jai un pb avec ton code il me met comme erreur
"Type 'FichierBDD' et 'Fichier' non défini"
tu peux mexpliquer l'erreur stp!!!

merci

signaler à un administrateur
Commentaire de DONYONE le 30/06/2008 18:45:20

Bonjour j'ai téléchargé le fichier zip mais cependant j'ai aussi un petit probleme j'ai l'erreur avec le fichier BDD et Fichier non défini est ce que j'aurai peu etre brulé une etape. pouvez vous s'il vous plait nous donner un peu plus de details sur ce pb.
merci d'avance.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Enregistrement d'un fichier dans une base [ par guidal ] Bien le bonjour :)Voilà donc mon problème ...Je souhaite enregistrer un fichier (de type quelconque) dans une base de donnée ...Le problème, c'est la C# Enregistrer un fichier uploadé dans une base de donnée [ par javato ] Bonjour, Je voudrais savoir comment on peut faire pour enregistrer un fichier upladé directement dans la base. Pour l'instant ce que j'au réussi à fai Droits d'écriture sur base Access [ par vmontagnon ] Bonjour à tous,Désolé, ça doit être un problème  classique, mais impossible d'ouvrir une base access en lecture/ecriture via des pages ASP.Net c#J'ai Date et BDD [ par Mickylord ] Bonjour !Mon probl&#232;me est le suivant :J'aimerai enregistrer une date dans ma base de donn&#233;e &#224; partire d'une page avec la m&#233;thode D Base de données Access distante [ par sisiz ] Bonjour, avec mon appli ASP.NET, je souhaite mon connecter sur une base MS ACCESS distante. J'ai invariablement la même erreur : Microsoft Jet ne peut enregistrer fichier sur serveur ftp [ par chandler8692 ] Bonjour tout le monde. Aujourd'hui, je souhaite créer un fichier xml dans mon code puis l'enregistrer sur mon serveur ftp. C'est cette seconde partie Images [ par John7 ] Bonsoir à tous,Si vous pouviez me donner un petit coup de main car j'ai un champ image alimenté par une base de données(il n'y a que le chemin dans la Poster un Fichier XML via HTTP [ par XFire ] Salut tout le monde;Je travaille sur un projet de base de donnees, et je veux envoyer le contenu d'une table a un server distant; 1-j'ai contruit un f Dialogue 'Enregistrer sous...' [ par cb92 ] BonjourJe reprends une application Web développée sous Visual Studio 2005 - C# - ASP, et je débute sur cet environnement.J'ai actuellement une icône, Enregistrer chemin d'acces bdd (antislash) [ par ronando ] Bonjour, sur ma page .aspx j'upload un fichier sur mon serveur et je veux ensuite enregistrer le chemin du fichier dans une base de données (mysql)


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.