2010-12-05 21 views
0

Hé les gars, j'ai essayé de nettoyer mon dernier post alors voilà.Page du gestionnaire de FTP, chaîne d'appel de l'aide d'aspx avec la méthode pour initialiser la page de gestionnaire

J'ai une page de gestionnaire dans mon projet asp.net qui "essaie" de gérer une demande de téléchargement ftp.

GetImage.ashx.cs

public class GetImage : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     { 

      // method for calling PhotoPath from Database.aspx.cs 
      FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri()); 
      // (new Uri) I would like to just store "photopath" in here as it has the ftp plus the filename in it 
      request.Method = WebRequestMethods.Ftp.DownloadFile; 

      request.Credentials = new NetworkCredential("username", "password"); 

      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.ClearHeaders(); 
       context.Response.ClearContent(); 
       context.Response.ContentType = "image/jpeg"; 
// Response.Headers.Add("Content-Type", "image/jpeg"); this is from the database.aspx page not sure if its correct 
        context.Response.BinaryWrite(mStream.GetBuffer()); 
       } 
       catch (WebException wex) 
       { 

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

      } 

     } 
    } 

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

}

Sur ma page qui tient mon gridview j'ai une méthode pour extraire des données d'un de mes cellules, cette cellule contient le chemin ftp et le nom l'image im essayant de montrer dans mon contrôle d'image:

Database.aspx.cs

protected void Page_Load(object sender, EventArgs e){ 

     Response.Headers.Add("Content-Type", "image/jpeg"); 

    } 

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string PhotoPath = ""; 
     // Get the currently selected row. Because the SelectedIndexChanging event 
     // occurs before the select operation in the GridView control, the 
     // SelectedRow property cannot be used. Instead, use the Rows collection 
     // and the NewSelectedIndex property of the e argument passed to this 
     // event handler. 
     GridViewRow row = GridView1.Rows[GridView1.SelectedIndex]; 

     PhotoPath = row.Cells[5].Text; 
     // how do I send photopath to my handler page? 
     //TextBox1.Text = PhotoPath; 
    } 
} 

}

Dans ma page de gestionnaire je veux appeler la chaîne "PhotoPath" et placez-le dans mon ftwwebrequest dans ma page de gestionnaire:

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(PhotoPath)); 

Ive mis mon contrôle de l'image ImageUrl à ~/GetImage.ashx et aura besoin d'aide avec le code pour appeler le gestionnaire de ma page de base de données?

Quelqu'un peut-il aider parce que je suis resté bloqué à ce sujet pendant des siècles?

+1

Veuillez ne pas publier de questions. Vous devriez avoir édité le prev un. Ou fermé le. –

Répondre

1
  • Vous devez transmettre PhotoPath au gestionnaire ASHX à l'aide de la chaîne de requête. Vous devriez alors lire le paramètre de la chaîne de requête et le transmettre à WebRequest.Create
  • Vous ne devriez pas avaler des exceptions
  • Vous ne devez effacer la réponse
  • Vous devez copier le FtpWebResponse directement au HttpResponse; Vous n'avez pas besoin d'un MemoryStream intermédiaire
  • La propriété ContentType indique au navigateur le type de fichier que vous envoyez. Voir http://en.wikipedia.org/wiki/MIME_type
+1

Comment est-ce que c'est fait? – SLaks

+1

@Garith: C'est ce que vous écririez dans l'ASHX. Vous utiliserez alors une URL comme '/FtpForwarder.ashx? PhotoPath =/chemin/vers/ftp/fichier'. – SLaks

+0

Ive ré-édité mon post ne pense toujours pas que j'ai le chemin de photo bit correct. :( –