IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Galerie d'images avec base de données Sql Server


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut Galerie d'images avec base de données Sql Server
    Bonjour à tous,

    je désire créer une galerie d'images sur ma page asp.net, j'ai parcouru de nombreux tutoriaux mais j'avoue que je suis un peu perdu

    La première difficulté réside dans le fait que mes images sont situées dans une base de données Sql Server et tous les tutoriaux que je trouve concernent l'utilisation d'un dossier local.

    Deuxièmement j'aimerais savoir si seule la piste javascript est envisageable ?

    Pour l'instant j'arrive à uploader une image dans ma base, mais sans avoir de vérification sur le fichier. En d'autres termes je peux uploader aussi des fichiers d'autres types (word/excel ... ) je voudrais aussi ajouter un contrôle sur le type de fichier.

    Merci, bonne journée. Je continue mes recherches de mon côté.

  2. #2
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Bonjour,

    Je pense que tu dois changer ta façon de faire.
    Stocker des images en bdd est une très mauvaise pratique et c'est pour cette raison que tu ne trouves pas de cours ou d'exemples sur le sujet...
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    @FirePrawn merci pour ton intervention. Je ne savais pas, comment faire dans ce cas ? Sinon j'ai réussi à faire le contrôle du type de fichier, je ne peux plus uploader que des images... mais si on en upload plus ça sert à rien

    EDIT=>En fait il faut que je fasse un dossier image sur mon serveur et que je stocke le lien dans ma base de données.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par FirePrawn Voir le message
    Stocker des images en bdd est une très mauvaise pratique et c'est pour cette raison que tu ne trouves pas de cours ou d'exemples sur le sujet...
    Cela est vrai pour les version de SQL Server <= 2008 R2. A partir de SQL Server 2012 a changé les façons de faire grâce notamment aux FileTables et à FileStream. Techniquement, l'image (ou plus généralement le fichier) n'est bien sûr pas stockée dans la base, mais sur le système de fichiers. On peut ensuite intéragir avec lui en T-SQL et obtenir un flux binaire. On peut aussi accéder aux fichiers directement via le système de fichiers (éventuellement via un partage réseau).

    @Stuckly quelle version de SQL Server utilises-tu ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    @DotNetMatt 2003

  6. #6
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Je parlais de façon générale

    La bonne façon de faire tu l'as trouvé en effet : stocker tes images dans un dossier sur le serveur et stocker le nom (ou le chemin) des images dans ta base
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Il n'est tout de meme pas conseillé de stocker des images en BDD meme avec les nouvelles versions de Base de Donnéé

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Suite à vos recommandations j'ai modifié mon programme pour ne plus avoir que des liens dans la base.

    J'ai testé avec des fichiers quelconques (word/excel en l'occurrence), j'arrive à enregistrer le chemin dans la base de données et dans mon répertoire, et à afficher tous les fichiers présents en base.

    Le soucis c'est le téléchargement. J'ai un GridView avec un lien de téléchargement qui comprends l'ID du fichier à télécharger.

    Voici mon code associé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Récupération de l'id
            int id = Convert.ToInt16(Request.QueryString["ID"]);
     
            // Récupération du fichier depuis la base de données
            clsDatabase db = new clsDatabase();
            clsFile unFichier = db.GetAFile(id);
     
            string path = "\\Documents\\"+unFichier.Name;
            // Envoi du fichier au navigateur
     
            Response.AddHeader("Content-Disposition", "attachment;filename=" + path + "\"");
            Response.TransmitFile(Server.MapPath(path));
            Response.End();
    J'ai une erreur :
    Échec lors du mappage du chemin d'accès' mon chemin '
    L'erreur ne m'aide pas vraiment, après quelques recherches sur Google je ne trouve pas grand chose.

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Essaie avec :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Response.AddHeader("Content-Disposition", "attachment;filename=" + unFichier.Name + "\"");
    Response.TransmitFile(unFichier.Name);
    Ca marche ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Ca marche ?
    C'est mieux mais pas encore ça. Il me télécharge un fichier qui porte le même nom, mais qui se finit par ".docx-" (alors que c'est un fichier ".docx")et qui est plus léger que le fichier originale... (7Ko contre 226)

    Merci encore pour votre aide

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Et avec ceci, en blindant un peu ?
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + unFichier.Name + "\"");
    Response.Clear();
    Response.WriteFile(unFichier.Name);
    Response.End();
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Points : 963
    Points
    963
    Par défaut
    Petite anecdote qui ne répond pas au problème mais pour le fun

    Ca me rappel un de mes premier projet où je stockais des images sur la DB... (une appli de wallpaper)

    Puis un jour, mon boss de l'époque était venu me voir, pour me demander si c'était moi ou un des autres stagiaires qui pompait tout l'espace disque sur le serveur. Et moi "oh non ma base fait même pas 500 lignes pour le moment ! C'est sûrement les autres !"... Hahaha des bons souvenirs
    "S'adapter, c'est vaincre" - Cellendhyll de Cortavar

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Et avec ceci, en blindant un peu ?
    Toujours le même résultat

    En ayant fait un try catch j'attrape l'erreur :
    Impossible d'évaluer l'expression, car le code est optimisé ou un frame natif se trouve en haut de la pile des appels.

  14. #14
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Moi pour télécharger un zip j'ai ces quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HttpContext.Current.Response.Clear();   // clear the current output content from the buffer
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + zipFileName);
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.BinaryWrite(outputMemStream.GetBuffer());
                HttpContext.Current.ApplicationInstance.CompleteRequest();
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HttpContext.Current.Response.Clear();   // clear the current output content from the buffer
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + zipFileName);
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                HttpContext.Current.Response.Charset = "";
                HttpContext.Current.Response.BinaryWrite(outputMemStream.GetBuffer());
                HttpContext.Current.ApplicationInstance.CompleteRequest();
    J'ai pas tout compris c'est quoi le " outputMemStream " ?

    Encore merci à tous pour votre aide.

  16. #16
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    C'est un MemoryStream.
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Apparemment j'ai réussi, j'ai juste mis ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Redirect("~/Documents/"+path,false);
    ça marche très bien, c'est bizarre que ça soit aussi "facile" alors que je me prends la tête depuis hier la dessus
    Y-aurait-il anguille sous roche ?

    C'est un MemoryStream.
    Merci pour ta réponse, je n'avais pas tout saisi.

  18. #18
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement en relisant ton code, tu n'avais pas chargé le fichier en mode binaire... Donc ce que l'on t'a proposé ne correspondait pas... Un simple redirect suffit comme tu l'as fait, cependant cela ne force pas le téléchargement du fichier, ça ne fait qu'afficher l'image dans le navigateur.

    Donc si tu veux forcer le téléchargement, il faut au préalable charger le contenu du fichier en mémoire, puis utiliser les bouts de code qu'on t'a envoyé pour forcer le téléchargement.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Effectivement en relisant ton code, tu n'avais pas chargé le fichier en mode binaire...
    Ah... bah à la base j'avais mis dans ma base que des données binaires pour le contenu. Pas le chemin.

    Donc si tu veux forcer le téléchargement, il faut au préalable charger le contenu du fichier en mémoire, puis utiliser les bouts de code qu'on t'a envoyé pour forcer le téléchargement.
    Merci à tous pour vos réponses; normalement je n'ai plus de soucis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2012, 15h07
  2. Extraire une image tiff d'une base de donnée sql server
    Par aristotetg dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2007, 21h51
  3. Page web lier avec base de donnée sql
    Par danlown dans le forum Accès aux données
    Réponses: 1
    Dernier message: 23/01/2007, 15h44
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo