строка запроса на странице обработчика - PullRequest
1 голос
/ 05 декабря 2010

Как мне создать строку запроса от photopath на моей странице database.aspx до моей страницы handler.ashx.

Я хочу, чтобы страница обработчика обнаруживалась в строке моего фотопути, содержащейся здесь:

        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 Ответ

4 голосов
/ 05 декабря 2010

На стороне веб-приложения (вашего обработчика событий) просто установите URL-адрес примерно так.

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

А в коде обработчика Http вы просто читаете его из параметра HttpContext метода ProcessRequest следующим образом.

string path = context.Request.QueryString["PhotoPath"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...