2010-12-05 23 views
1

Comment créer une chaîne de requête depuis photopath sur ma page database.aspx vers ma page handler.ashx.Chaîne de requête à la page du gestionnaire

Je veux la page de gestionnaire pour revenir sur ma chaîne PhotoPath contenue ici:

 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string PhotoPath; 

     GridViewRow row = GridView1.Rows[GridView1.SelectedIndex]; 

     PhotoPath = row.Cells[5].Text; 
     PhotoPath = HttpUtility.UrlEncode(PhotoPath); 

     HttpWebRequest request = (HttpWebRequest) 
      WebRequest.Create(PhotoPath); 
     HttpWebResponse response = (HttpWebResponse) 
       request.GetResponse(); 
     Stream resStream = response.GetResponseStream(); 
     using (System.Drawing.Image img = System.Drawing.Image.FromStream(resStream)) 
     { 
      img.Save("temp.jpg", ImageFormat.Jpeg); 
     } 

    } 
} 

puis pour le récupérer dans ma page de gestionnaire de GetImage.ashx ici:

public class GetImage : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      { 
      string PhotoPath = System.Web.HttpContext.Current.Request.QueryString["PhotoPath"]; 
      PhotoPath = HttpUtility.UrlDecode(PhotoPath); 
      FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(PhotoPath)); 
      request.Method = WebRequestMethods.Ftp.DownloadFile;  
      request.Credentials = new NetworkCredential("Administrator", "commando"); 

      try 
      { 
       FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

       Stream stream = response.GetResponseStream(); 
       byte[] bytes = new byte[2048]; 

       int i = 0; 
       MemoryStream mStream = new MemoryStream(); 

       do 
       { 

        i = stream.Read(bytes, 0, bytes.Length); 

        mStream.Write(bytes, 0, i); 
       } while (i != 0); 

       context.Response.Clear(); 
       context.Response.ClearHeaders(); 
       context.Response.ClearContent(); 
       context.Response.ContentType = "image/jpeg"; 
       context.Response.BinaryWrite(mStream.GetBuffer()); 

      } 
      catch (WebException wex) 
      { 

       //throw new Exception("Unable to locate or access your file.\\nPlease try a different file."); 

      } 
      catch (Exception ex) 
      { 
       throw new Exception("An error occurred: " + ex); 

      } 

     } 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

Répondre

4

Sur le web côté application (votre gestionnaire d'événements), réglez simplement votre URL sur quelque chose comme ça.

http://myserver/GetImage.ashx?PhotoPath=\\photoserver\item.gif 

Et dans le code du gestionnaire Http, vous venez de le lire à partir du paramètre HttpContext de la méthode ProcessRequest comme si.

string path = context.Request.QueryString["PhotoPath"]; 
+0

Je continue à obtenir une erreur: sur cette ligne: FtpWebRequest demande = (FtpWebRequest) FtpWebRequest.Create (nouveau Uri (PhotoPath)); La valeur ne peut pas être nulle. Nom du paramètre: uriString –

+0

Cette erreur est provoquée par une valeur nulle dans la variable PhotoPath. Êtes-vous sûr que c'est transmis? Il semble que vous utilisiez le texte de la cellule 5 dans votre rangée, ce qui devrait être dans le format de mon exemple. En ce qui concerne l'utilisation du serveur FTP, je suppose que vous devrez lire l'adresse ftp et/ou le chemin de la configuration dans le gestionnaire, à moins que je ne vous comprenne mal. –