Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / July 2007

Tip: Looking for answers? Try searching our database.

How to call an aspx that accepts parameters through HTTP POST and returns an image, and then display the image in my html?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
computer_guy - 20 Jul 2007 02:50 GMT
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 - 20 Jul 2007 03:31 GMT
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

> Hi Everyone,
>
[quoted text clipped - 20 lines]
> Thanks,
> computer_guy
Brian - 20 Jul 2007 03:38 GMT
FYI - the class file should have an ".ashx" extension.

> Hi Everyone,
>
[quoted text clipped - 20 lines]
> Thanks,
> computer_guy
computer_guy - 20 Jul 2007 05:25 GMT
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

> FYI - the class file should have an ".ashx" extension.
>
[quoted text clipped - 24 lines]
>
> - Show quoted text -

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.