none
Afficher des images dans un repeater ASP RRS feed

  • Question

  • Bonjour
    Je suis en train de développer un système d'upload de photos, que je désire ensuite afficher  dynamiquement dans un repeater.

    Voici le code effectuant l'upload de fichier et allant effectuer l'insertion du chemin du fichier dans la base de donnée. Le chemin de fichier enregistré est de la forme :
    C:\photos\monfichier
    if (FileUpload1.HasFile)
                {
                   string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);
                   if ((fileExt == ".jpg") | fileExt == ".gif" | fileExt == ".png")
                   {
                       try
                       {
                           string fichier = "C:\\photos\\" + Session.SessionID + (string)Session["pseud"] +FileUpload1.FileName;
                           FileUpload1.SaveAs(fichier);
                           ServicePhotoSoap photo = new ServicePhotoSoapClient();
                           DateTime date = DateTime.Now;
                           photo.CreatePhoto(edt_titrePhoto.Text, fichier, (short)Session["iduser"], date);
                           edt_titrePhoto.Text = "";
                           Response.Write("<script>alert('Photo postée avec succes');</script>");
    
    
                       }
                       catch (Exception ex)
                       {
                           //Label1.Text = "ERROR: " + ex.Message.ToString();
                           Response.Write("<script>alert('Erreur');</script>");
                       }
                   }
                   else
                   {
                       Response.Write("<script>alert('Les seules extensions autorisées sont jpg, gif, png');</script>");
                   }
                }
                else
                {
    
                    Response.Write("<script>alert('Vous devez spécifier un fichier');</script>");
                }
    
            }

    Voici le code que j'utilise ensuite au niveau de mon repeater:

    <asp:Repeater ID="LV_MesPhotos" runat="server">
         <ItemTemplate>
            <br />
            <%# DataBinder.Eval(Container, "DataItem.Posteur") %>
    	<div class="text_">
    	     <h1><a href="#"><%# DataBinder.Eval(Container, "DataItem.Titre") %></a></h1>
            </div>
            <img src="<%# DataBinder.Eval(Container.DataItem, "Fichier") %>" id = "Img1"
                      border="0"
                        alt="<%# DataBinder.Eval(Container.DataItem, "Fichier") %>"/></a>
    	<h2><a href="#"><img src="img/more.gif" alt="Read more"  />Read more</a> <a href="#"><img src="img/comment.gif" alt="Comments"  />Comments (21)</a></h2>
                      
    	
            <br />
           </ItemTemplate>
    </asp:Repeater>

    Mon problème est que je ne parviens pas à afficher l'image. J'arrive a récupérer le titre et le chemin de fichier mais en exécution mon image ne s'affiche pas, je n'ai que le texte alternatif. Que doi-je faire pour afficher mon image? Le chemin le chemin de fichier utilisé est-il correcte?
    samedi 23 mai 2009 09:46

Réponses

  • Yo cced,

    Selon les spécifications de ton appli, il y a deux options :

    1. Sauvegarder les images dans un dossier qui est dans Server.MapPath("~/") par exemple (Path.Combine(Server.MapPath("~/"), "images")  ) afin qu'il soit accessible à ton appli web sur le serveur web puis mettre le chemin relatif dans les attributs ImageUrl (~/images/image.jpg).
    2. Utiliser un HttpHandler pour charger dynamiquement le contenu de tes images via une base de données et les mettre dans context.Response en bytes. Un HttpHandler est tout simplement une classe qui est exécutée pour processer les requêtes http qui sont envoyé du client vers le serveur web. Par exemple quand on inclut une image dans une page html <img src="~/image/image.jpg"/> quand le browser essaye de mettre en forme la partie ou se trouve l'image dans la page html, il envoie une requête http au serveur web pour récupérer le contenu de l'image en bytes généralement. Voici un tutoriel pratique que je t'invite à regarder sur les httpHandler : http://humann.developpez.com/httphandler/

    Si tu dois stocker les images dans un dossier temporaire sur un serveur de fichier, je te conseil d'utiliser l'option 2 car le dossier ne sera pas accessible par le serveur web. Si par contre tu peux stocker les images sur un dossier accessible via le serveur web tu peux choisir l'option1.

    Bien cordialement,


    aelassas.free.fr
    • Marqué comme réponse cced vendredi 19 août 2011 07:28
    jeudi 18 août 2011 21:38
    Auteur de réponse
  • Bonjour Mediatvcom. Ce post date de 2009, mais il est vrai que je n'ai pas indiqué la solution au problème que j'avais pour le clôturer. Effectivement, mon problème était que je ne parvenais pas à récupérer le path dus serveur sur lequel j'effectuais un upload. C'est comme vous l'avez indiqué, en utilisant  "Server.MapPath" au moment de l'upload.
    Cédric Yumba
    • Marqué comme réponse cced vendredi 19 août 2011 07:28
    vendredi 19 août 2011 07:27

Toutes les réponses

  •         <%# DataBinder.Eval(Container, "DataItem.Posteur") %>
    ....
          <h1><a href="#"><%# DataBinder.Eval(Container, "DataItem.Titre") %></a></h1>
    ....
            <img src="<%# DataBinder.Eval(Container.DataItem, "Fichier") %>" id = "Img1"
    ...
    Mon problème est que je ne parviens pas à afficher l'image. J'arrive a récupérer le titre et le chemin de fichier mais en exécution mon image ne s'affiche pas, je n'ai que le texte alternatif. Que doi-je faire pour afficher mon image? Le chemin le chemin de fichier utilisé est-il correcte?
    euh, pourquoi pas DataBindiner.Eval(Container, "DataItem.Fichier") ?

    Dans tous les cas : pour comprendre pourquoi l'image ne s'affiche pas, il est préférable de faire un "View Source" sur la page affichée dans le navigateur pour voir ce qui est effectivement mis dans l'attribut src.

    Alain
    mardi 26 mai 2009 06:09
  • Bonjour
    j'ai le même résultat avec DataBindiner.Eval(Container, "DataItem.Fichier")

    sur l'attrubut src de la page générée j'ai bien c:\photos\monfichier

    ce répertoire ne fait pas partie du serveur, peut être est ce pour cela que ca ne s'affiche pas?

    Cédric
    mardi 26 mai 2009 10:24
  • sur l'attrubut src de la page générée j'ai bien c:\photos\monfichier

    ce répertoire ne fait pas partie du serveur, peut être est ce pour cela que ca ne s'affiche pas?


    Exactement : le champ src est interprété par le navigateur comme une URL dépendant éventuellement de celle de la page :
    1) un chemin relatif, par exemple src="monfichier.jpg" ou src="../monfichier.jpg", il combine cela avec l'url de la page pour calculer celle du fichier
    2) un chemin absolu, par exemple src="/images/monfichier.jpg", il utilise alors le nom du serveur + le src
    3) une URL complète, par exemple src="http://www.trucmuche.com/images/monfichier.jpg", l'url de la page est ignorée

    Alain
    jeudi 28 mai 2009 05:55
  • 2) un chemin absolu, par exemple src="/images/monfichier.jpg", il utilise alors le nom du serveur + le src
    Dans ce cas je dois insérer dans ma base de donnée un chemin absolu et pas complet. Ma fonction effectuant l'upload de fichier
    FileUpload1.SaveAs(fichier);
    
    ne prend pas en paramètre de chemin absolu. Connaissez vous une fonction qui le fait? ou bien dois-je manipuler ma string?

    Cédric
    lundi 1 juin 2009 09:55
  • Yo cced,

    Selon les spécifications de ton appli, il y a deux options :

    1. Sauvegarder les images dans un dossier qui est dans Server.MapPath("~/") par exemple (Path.Combine(Server.MapPath("~/"), "images")  ) afin qu'il soit accessible à ton appli web sur le serveur web puis mettre le chemin relatif dans les attributs ImageUrl (~/images/image.jpg).
    2. Utiliser un HttpHandler pour charger dynamiquement le contenu de tes images via une base de données et les mettre dans context.Response en bytes. Un HttpHandler est tout simplement une classe qui est exécutée pour processer les requêtes http qui sont envoyé du client vers le serveur web. Par exemple quand on inclut une image dans une page html <img src="~/image/image.jpg"/> quand le browser essaye de mettre en forme la partie ou se trouve l'image dans la page html, il envoie une requête http au serveur web pour récupérer le contenu de l'image en bytes généralement. Voici un tutoriel pratique que je t'invite à regarder sur les httpHandler : http://humann.developpez.com/httphandler/

    Si tu dois stocker les images dans un dossier temporaire sur un serveur de fichier, je te conseil d'utiliser l'option 2 car le dossier ne sera pas accessible par le serveur web. Si par contre tu peux stocker les images sur un dossier accessible via le serveur web tu peux choisir l'option1.

    Bien cordialement,


    aelassas.free.fr
    • Marqué comme réponse cced vendredi 19 août 2011 07:28
    jeudi 18 août 2011 21:38
    Auteur de réponse
  • Bonjour Mediatvcom. Ce post date de 2009, mais il est vrai que je n'ai pas indiqué la solution au problème que j'avais pour le clôturer. Effectivement, mon problème était que je ne parvenais pas à récupérer le path dus serveur sur lequel j'effectuais un upload. C'est comme vous l'avez indiqué, en utilisant  "Server.MapPath" au moment de l'upload.
    Cédric Yumba
    • Marqué comme réponse cced vendredi 19 août 2011 07:28
    vendredi 19 août 2011 07:27