查询字符串到处理程序页面

时间:2010-12-05 20:04:56

标签: c# asp.net http c#-4.0

如何在我的database.aspx页面上的photopath创建一个查询字符串到我的handler.ashx页面。

我希望处理程序页面能够获取此处包含的photopath字符串:

        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);
        }

    }
}

然后在我的GetImage.ashx处理程序页面中检索它:

    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;
        }
    }
}

1 个答案:

答案 0 :(得分:4)

在Web应用程序端(您的事件处理程序),只需将您的网址设置为这样的内容。

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

在Http处理程序代码中,您只需从HttpContext方法的ProcessRequest参数中读取它,就像这样。

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