2009-04-08 5 views
0

Au lieu de remplir mon répéteur avec des images d'un dossier de mon projet, je veux le polir avec un lien vers l'image ...... ........Obtention d'une image à partir d'un lien hypertexte et non d'un dossier pour remplir mon contrôle Répétiteur

http://www.erate.co.za/imgGrab.aspx?Id=99

les modifications de code dois-je faire pour que mon regard de code à mon lien pour l'image et pas le dossier « photos »?

Ma page Charge

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      string sBasePath = System.Web.HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"]; 
      if (sBasePath.EndsWith("\\")) 
       sBasePath = sBasePath.Substring(0,sBasePath.Length-1); 

      sBasePath = sBasePath + "\\" + "pics"; 

      System.Collections.Generic.List<string> oList = new System.Collections.Generic.List<string>(); 
      foreach (string s in System.IO.Directory.GetFiles(sBasePath, "MyPicture.jpg")) 
      { 
       //We could do some filtering for example only adding .jpg or something 
       oList.Add(System.IO.Path.GetFileName(s)); 

      } 
      repImages.DataSource = oList; 
      repImages.DataBind(); 
     } 

    } 

événement Mon ItemDataBound pour mon répétiteur (appelés repImages)

protected void repImages_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.AlternatingItem || 
      e.Item.ItemType == ListItemType.Item) 
     { 
      string sFile = e.Item.DataItem as string; 

      //Create the thumblink 
      HyperLink hlWhat = e.Item.FindControl("hlWhat") as HyperLink; 
      hlWhat.NavigateUrl = ResolveUrl("~/pics/" + sFile ); 
      hlWhat.ToolTip = System.IO.Path.GetFileNameWithoutExtension(sFile); 
      hlWhat.Attributes["rel"] = "imagebox-bw"; 

      Image oImg = e.Item.FindControl("imgTheImage") as Image; 
      oImg.ImageUrl = ResolveUrl("~/createthumb.ashx?gu=/pics/" + sFile + "&xmax=100&ymax=100"); 


     } 

    } 

Etienne

+0

Veuillez indiquer votre source ASPX (la partie qui contient le répéteur) afin que je puisse essayer d'exécuter cet exemple. – Cerebrus

+0

Merci! Vous pouvez télécharger l'ensemble du projet ici ---- http://www.aspcode.net/A-simple-image-gallery.aspx ----- fichier .ZIP est situé juste en bas ---- son un projet vraiment cool. – Etienne

Répondre

0

Dans le modèle du répéteur comprend une étiquette <img>. Si vous devez définir la source par programme, définissez runat="server".

+0

Merci, mais comment pourrais-je l'intégrer avec mon code actuel? – Etienne

+0

@Richard, le répéteur contient déjà un asp: Image control. – Cerebrus

+0

@Etienne: Je ne sais pas sans voir le balisage (la réponse est probablement d'utiliser la liaison de données). – Richard

1

Si je comprends bien, cela est un problème à multiples facettes:

a. Vous souhaitez charger des images à partir d'une URL Internet au lieu d'un dossier local. Cela signifie que vous devez avoir un moyen de répertorier les fichiers disponibles sur l'URL distante. Si vous observez le problème objectivement, vous vous rendrez compte que la seule différence entre la récupération d'images à partir d'un emplacement distant et de votre système local est que les fichiers sont facilement énumérables à l'aide de la classe DirectoryInfo. La méthode GetFiles renvoie ici un tableau de FileInfo et vous pouvez obtenir le nom réel de chaque fichier en utilisant la propriété FileName. Donc, fondamentalement, vous avez besoin d'une liste de chaînes qui correspondent à l'emplacement du fichier.

b. L'énumération des fichiers à partir d'un emplacement distant dépend de nombreux facteurs, tels que le protocole que vous utilisez pour récupérer cette liste. Si vous utilisez HTTP et que nous pouvons supposer que vous avez un certain contrôle sur le serveur à cet emplacement, l'URL devra principalement prendre en charge la navigation dans les répertoires. Vous devrez ensuite analyser cette liste de répertoires desservis (qui n'est pas standard et spécifique au serveur) et charger toutes les URL d'image disponibles sous forme de chaînes. Vous pouvez ensuite remplir votre répéteur avec cette liste. Voir this discussion pour une solution possible.

Si le serveur prend en charge FTP, vous travaillez plus facilement car vous pouvez énumérer les images à l'aide des méthodes WebRequestMethods.Ftp.ListDirectory ou WebRequestMethods.Ftp.ListDirectory.

c. Si vous voulez créer des vignettes pour les images, vous devrez écrire du code pour télécharger chaque image, l'enregistrer dans un emplacement temporaire et ensuite effectuer des manipulations dimensionnelles.

d. Cependant, si la liste des images disponibles sur le site Internet est statique et que vous disposez déjà de ces informations, vous pouvez simplement charger cette liste sous la forme d'une liste de chaînes et définir la propriété src de chaque contrôle Image sur cette liste. Les vignettes resteront toutefois un problème, à moins que vous ne puissiez télécharger votre créateur de vignettes (le gestionnaire HTTP) à cette URL, de sorte que les fichiers sont récupérés localement pour la manipulation et les vignettes vous sont servis automatiquement.

+0

Merci pour cela - des exemples de code s'il vous plaît pour aller avec votre explication? – Etienne

+0

Eh bien, c'est difficile à faire jusqu'à ce que vous répondiez à certaines des questions/possibilités que j'ai mentionnées. Je pense que cette question est plus de "Devrais-je ..." plutôt que "Comment ...?" – Cerebrus

+0

MMM, peut-être que je dois dire enregistrer toutes mes photos dans un dossier. C'est juste au moment où ils sont enregistrés dans ma base de données et je ne voulais pas changer mon code. – Etienne

Questions connexes