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 :
(DataProvider et ConvertorToolBox sont des classes à moi, mais elles fonctionnent)
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(); }
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 !
Partager