How to call an aspx that accepts parameters through HTTP POST and returns an image, and then display

Discussion in 'ASP .Net' started by computer_guy, Jul 20, 2007.

  1. computer_guy

    computer_guy Guest

    Hi Everyone,

    I run into a problem. I am trying to write an aspx that can
    dynamically generate an image based on some input parameters.

    Things are very simple if the size of the parameters is small and I
    can put them on the URL and pass them in as HTTP GET. In my image
    generation script I just need to read the parameters and then pump out
    the right MIME type and the right image byte stream. It is also very
    easy to use:

    <img source="image_gen.aspx?p1=...."> will do the trick.


    However, it looks like I need to pass in more parameters than HTTP GET
    can support. I am thinking about HTTP POST. I think I can still write
    the image generation script the same way, but the question now is how
    to call the script and display the image in my html.


    <img source="image_gen.aspx" and HTTP POST to this URL> How?

    Does anyone know?

    Thanks,
    computer_guy
    computer_guy, Jul 20, 2007
    #1
    1. Advertising

  2. computer_guy

    Brian Guest

    You could use a control that inherits from IHttpHandler like this:

    <%@ WebHandler Language="C#"
    Class="AspNet.StarterKits.Classifieds.Web.PhotoDisplay" %>

    using System;
    using System.Configuration;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Web;
    using AspNet.StarterKits.Classifieds.BusinessLogicLayer;


    namespace Mynamespace
    {
    public class PhotoDisplay : IHttpHandler
    {
    public const string QueryStringFullSize = "full";
    public const string QueryStringMediumLarge = "large";
    public const string QueryStringMediumSize = "medium";
    public const string QueryStringMediumSmall = "small";
    public void ProcessRequest(HttpContext context)
    {

    HttpResponse Response = context.Response;
    HttpRequest Request = context.Request;
    Image myThumbnail = new Bitmap(1,1);

    //string url2 = Path.Combine(@"c:\attachments", "110.jpg");
    if (Request.QueryString["photoid"] != null)
    {
    // Retrieve the path to the file.
    string url2 =
    GetPicturePath(Request.QueryString["photoid"],context);
    if (url2.Length > 0)
    {

    Image.GetThumbnailImageAbort myCallback = new
    Image.GetThumbnailImageAbort(ThumbnailCallback);
    Image fullImg = Image.FromFile(url2);
    if (Request.QueryString["size"] ==
    QueryStringMediumSmall)
    myThumbnail = fullImg.GetThumbnailImage(100, 100,
    myCallback, IntPtr.Zero);
    if (Request.QueryString["size"] == QueryStringMediumSize)
    myThumbnail = fullImg.GetThumbnailImage(200, 200,
    myCallback, IntPtr.Zero);
    if (Request.QueryString["size"] == QueryStringMediumLarge)
    myThumbnail = fullImg.GetThumbnailImage(300, 300,
    myCallback, IntPtr.Zero);
    if (Request.QueryString["size"] == QueryStringFullSize)
    myThumbnail = fullImg;

    // make a memory stream to work with the image bytes
    MemoryStream imageStream = new MemoryStream();

    // put the image into the memory stream
    myThumbnail.Save(imageStream, ImageFormat.Jpeg);

    // make byte array the same size as the image
    byte[] imageContent = new Byte[imageStream.Length];

    // rewind the memory stream
    imageStream.Position = 0;

    // load the byte array with the image
    imageStream.Read(imageContent, 0,
    (int)imageStream.Length);

    //byte[] allBytes = File.ReadAllBytes(url2);
    Response.ContentType = "image/jpeg";
    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.BufferOutput = false;
    Response.OutputStream.Write(imageContent, 0,
    imageContent.Length);
    }

    }
    //e.Graphics.DrawImage(myThumbnail, 150, 75);

    }
    public bool ThumbnailCallback()
    {
    return false;
    }

    public bool IsReusable
    {
    get
    {
    return true;
    }
    }

    }
    }

    Then call the control like this:
    <img id="ss_img" src="PhotoDisplay.ashx?photoid=KeyForImage&amp;size=large"
    alt="My Image" width="230" />

    Just for the photoid be sure and pass something in that indicates what photo
    you want. If you are generating the image at runtime - perhaps you can use
    more than one parameter that can indicate Width, Height, content, etc...

    -Brian

    "computer_guy" <> wrote in message
    news:...
    > Hi Everyone,
    >
    > I run into a problem. I am trying to write an aspx that can
    > dynamically generate an image based on some input parameters.
    >
    > Things are very simple if the size of the parameters is small and I
    > can put them on the URL and pass them in as HTTP GET. In my image
    > generation script I just need to read the parameters and then pump out
    > the right MIME type and the right image byte stream. It is also very
    > easy to use:
    >
    > <img source="image_gen.aspx?p1=...."> will do the trick.
    >
    >
    > However, it looks like I need to pass in more parameters than HTTP GET
    > can support. I am thinking about HTTP POST. I think I can still write
    > the image generation script the same way, but the question now is how
    > to call the script and display the image in my html.
    >
    >
    > <img source="image_gen.aspx" and HTTP POST to this URL> How?
    >
    > Does anyone know?
    >
    > Thanks,
    > computer_guy
    >
    Brian, Jul 20, 2007
    #2
    1. Advertising

  3. computer_guy

    Brian Guest

    FYI - the class file should have an ".ashx" extension.

    "computer_guy" <> wrote in message
    news:...
    > Hi Everyone,
    >
    > I run into a problem. I am trying to write an aspx that can
    > dynamically generate an image based on some input parameters.
    >
    > Things are very simple if the size of the parameters is small and I
    > can put them on the URL and pass them in as HTTP GET. In my image
    > generation script I just need to read the parameters and then pump out
    > the right MIME type and the right image byte stream. It is also very
    > easy to use:
    >
    > <img source="image_gen.aspx?p1=...."> will do the trick.
    >
    >
    > However, it looks like I need to pass in more parameters than HTTP GET
    > can support. I am thinking about HTTP POST. I think I can still write
    > the image generation script the same way, but the question now is how
    > to call the script and display the image in my html.
    >
    >
    > <img source="image_gen.aspx" and HTTP POST to this URL> How?
    >
    > Does anyone know?
    >
    > Thanks,
    > computer_guy
    >
    Brian, Jul 20, 2007
    #3
  4. computer_guy

    computer_guy Guest

    Thanks a lot for your help.

    The problem is that the url is too short to specify all the
    parameters. It is more like the following:

    <img id="ss_img" src="PhotoDisplay.ashx?data=<Large Block of Data Here
    (~ 32 KB) > />

    The reason I am doing this is because the data used to parameterize
    the image is generated on the fly. Eventually I want something like
    this:

    Dynamic HTML Page
    -------------------------------

    1. Complicated algorithm to generate data and store it in memory

    2. Inline Image to visualize generated data in graphic form.
    (This is something I am hoping I can generate on the fly with another
    script.)

    3. HTML table to visualize generated data in tabluar form.

    ------------------End of HTML Page------------------

    The problem here is that I don't want to call or write the algorithm
    (1 above) twice when displaying it in graphic and tabular form.

    So if I want to pass a large block of data to PhotoDisplay.ashx below
    through HTTP POST, can I do it?

    <img id="ss_img" src="PhotoDisplay.ashx?data=<Large Block of Data Here
    (~ 32 KB) > />

    Thanks a lot,
    computer_guy

    On Jul 19, 9:38 pm, "Brian" <> wrote:
    > FYI - the class file should have an ".ashx" extension.
    >
    > "computer_guy" <> wrote in message
    >
    > news:...
    >
    >
    >
    > > Hi Everyone,

    >
    > > I run into a problem. I am trying to write an aspx that can
    > > dynamically generate an image based on some input parameters.

    >
    > > Things are very simple if the size of the parameters is small and I
    > > can put them on the URL and pass them in as HTTP GET. In my image
    > > generation script I just need to read the parameters and then pump out
    > > the right MIME type and the right image byte stream. It is also very
    > > easy to use:

    >
    > > <img source="image_gen.aspx?p1=...."> will do the trick.

    >
    > > However, it looks like I need to pass in more parameters than HTTP GET
    > > can support. I am thinking about HTTP POST. I think I can still write
    > > the image generation script the same way, but the question now is how
    > > to call the script and display the image in my html.

    >
    > > <img source="image_gen.aspx" and HTTP POST to this URL> How?

    >
    > > Does anyone know?

    >
    > > Thanks,
    > > computer_guy- Hide quoted text -

    >
    > - Show quoted text -
    computer_guy, Jul 20, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    6
    Views:
    4,776
    Tor Iver Wilhelmsen
    Aug 29, 2005
  2. MadHatter51
    Replies:
    1
    Views:
    847
    Hakan Lambracht
    May 17, 2006
  3. Karim Ali
    Replies:
    1
    Views:
    270
    James Stroud
    May 24, 2007
  4. ERobishaw
    Replies:
    1
    Views:
    797
    Anthony Jones
    Mar 22, 2008
  5. Replies:
    0
    Views:
    258
Loading...

Share This Page