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 :

Afficher une image depuis la base de données


Sujet :

ASP.NET

  1. #1
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut Afficher une image depuis la base de données
    Bonjour !

    J'essaie en vain depuis quelques temps d'afficher une image mémorisée dans ma base de données. Je suis sous SQL Server 2005, et mon image est un champ de type varbinary(max), située dans la table "PRODUIT", et qui peut être obtenu par la procédure stockée "get_image_produit @id numeric(18,0)".
    Après avoir fait quelques recherches, j'ai compris qu'il fallait créer une nouvelle page aspx dont le seul boulot est de contenir les données de l'image et dont le type est image.

    Ma page (nommée GetImage.aspx) prend dans son url les paramètre "type" et "id", qui vont servir à indiquer quelle procédure stockée utilisée, puisque j'en aurai besoin dans d'autres parties de mon application, pour d'autres choses (non implémentées pour l'instant).

    Voici donc le code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    protected void Page_Load(object sender, EventArgs e)
    {
     
    	// On met le contenu de la page en tant qu'image jpeg
    	// et on enlève les headers de réponse
    	Response.ContentType = "image/jpeg";
    	Response.Clear();
     
    	// Réponse buffer de manière à ce que la page soit 
    	// envoyée après les taitements
    	Response.BufferOutput = true;
     
     
    	// On récupère le type et l'id de l'objet à aller chercher
    	string type = "" + Request["type"];
    	string id = "" + Request["id"];
    	Int32 id_pro;
     
    	// S'il y a un problème dans les paramètres, on sort
    	if (type == "" || id == "" || Int32.TryParse(id, out id_pro))
    	{
    		Response.Flush();
    		return;
    	}
     
    	// Le tableau de bytes contenant le contenu de l'image
    	byte[] imageBytes;
     
    	// Selon le type, on va effectuer des requêtes différentes
    	switch (type)
    	{
    		case "produit":
    			DbCommand command = DataProvider.CreateCommandSP("get_image_produit");
     
    			IDataParameter paramId = command.CreateParameter();
    			paramId.ParameterName = "@id";
    			paramId.DbType = DbType.Int32;
    			paramId.Value = id_pro;
    			paramId.Direction = ParameterDirection.Input;
    			command.Parameters.Add(paramId);
     
    			imageBytes = (byte[])DataProvider.CreateDataSet(command).Tables[0].Rows[0]["pro_image"];
     
    			break;
    		// On rajoutera d'autres cases plus tard
    		default :
    			Response.Flush();
    			return;
    	}
     
    	Bitmap image = ConvertorToolBox.byteArrayToBitmap(imageBytes);
    	image.Save(Response.OutputStream, ImageFormat.Jpeg);
     
    	image.Dispose();
     
    	// On envoie la sortie au client
    	Response.Flush();
     
    }
    (DataProvider et ConvertorToolBox sont des classes à moi, mais elles fonctionnent)

    Le problème et bien... C'est que ça ne marche pas. Lorsque j'appelle la page (par exemple "http://localhost:1059/Pages/GetImage.aspx?type=produit&id=17"), l'url s'affiche dans la page et c'est tout.


    Quelqu'un a-t-il une idée ?


    Merci beaucoup !

  2. #2
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Tu dois faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Response.ContentType = "image/jpeg";
    Response.Clear();
    Response.WriteBinary(imageBytes)
    Je sais plus le code par cœur mais j'ai fait qqch d'identique.. si tu trouves pas, je t envoie le code ce soir...
    @+

  3. #3
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    Nope, j'avais déjà essayé (et je viens de le faire à nouveau), mais ça ne change malheureusement rien.

  4. #4
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    J'ai fait un truc qui marche bien... par contre moi j'affiche la photo dans un popup. Tu ne dois rien afficher d'autres sur cette page.. je ne sais pas si c'est ce que tu veux faire.

    Sinon il existe des composants qui arrivent à afficher une photo depuis un flux binaire

    Egalement tu peux tenter de sauver la photo dans un répertoire et de ton site. pour l'afficher tu n'a as qu'à utiliser ImageUrl du composant image... à la fin de chaque session tu peux nettoyer les photos crées par chaque utilisateur...

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut
    Il faut que le content type soit défini après le clear
    mais il ne faut pas stocker les images (ou les vidéo en base) ça n'a aucun intérêt

  6. #6
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    En fait je compte utiliser l'url de cette page (paramétrée comme il se doit) comme ImageURL d'un contrôle Image dans d'autres pages.

  7. #7
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    Il faut que le content type soit défini après le clear
    Merci, je viens d'essayer, mais toujours le même problème.

    mais il ne faut pas stocker les images (ou les vidéo en base) ça n'a aucun intérêt
    Je n'aime pas trop non plus, mais ça fait partie de ce que l'on m'a demandé. Ceci dit ça a aussi ses avantages.

  8. #8
    CUCARACHA
    Invité(e)
    Par défaut Essayes ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageToPublish.Save(Response.OutputStream,ImageToPublish.RawFormat);
    ImageToPublish est un objet System.Drawing.Bitmap
    Dernière modification par Deepin ; 06/01/2010 à 15h21. Motif: Balises [CODE]...[/CODE]

  9. #9
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    C'est ce que j'avais fait dans mon code de départ, à la différence près que j'avais utilisé ImageFormat.Jpeg. J'ai essayé avec RawFormat, mais ça n'a pas l'air de changer grand chose non plus.

  10. #10
    Membre éprouvé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 194
    Par défaut
    Mon test était faux.
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // S'il y a un problème dans les paramètres, on sort
    if (type == "" || id == "" || Int32.TryParse(id, out id_pro))
    {
    	Response.Flush();
    	return;
    }
    Il fallait bien entendu mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // S'il y a un problème dans les paramètres, on sort
    if (type == "" || id == "" || !Int32.TryParse(id, out id_pro))
    {
    	Response.Flush();
    	return;
    }
    Ceci dit, j'ai quand même dû utiliser Response.BinaryWrite au lieu de image.Save.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/11/2008, 11h58
  2. [SQL] Afficher une image depuis une base de données
    Par shenz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/01/2008, 00h46
  3. Afficher une image depuis ma base de données MySQL
    Par hnoumbo dans le forum Outils
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  4. [MySQL] Afficher une image stocké en base données
    Par Blo0d4x3 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/06/2006, 17h02

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