Improve company productivity with a Business Account.Sign Up

x
?
Solved

Display image on web page directly from byte array.

Posted on 2009-05-04
9
Medium Priority
?
1,321 Views
Last Modified: 2012-06-21
I have successfully managed to upload images into an image field in SQL Server 2005.  I can retrieve those images in Byte array format.  I want to be able to display that image file as an image in the web page without going to file first.  In other words, stream it directly down to the browser and display the image in an <img> tag or <input type="image" or any other tags that takes some kind of src="" parameter.  So far, the only thing I have been able to conceive is making an ASPX page that reads the database, modifies the MIME type, and streams down the information that way.  Is this the best way to do something like this or is there something better?  I am using ASP.NET 3.5 and SQL Server 2005.
0
Comment
Question by:j_s_kelley
  • 3
  • 3
  • 2
  • +1
9 Comments
 
LVL 6

Expert Comment

by:Cebik
ID: 24297402
In windows form i think it will be looks like this..

Stream stream = new MemoryStream(bitmapInByteArray);
Image image = Image.FromStream(stream);

Open in new window

0
 
LVL 6

Expert Comment

by:RPCIT
ID: 24297409
I think what your doing would be against the "rules" of common browsers.  To do it your way I think you would have to install some kind of active-x control on the client (probably not what you want).  In essence..  HTML really hasn't changed that much on the browser side.. you have to have a file on the server.. and the browser can read HTML to download that file and display it in the browser.

I'm thinking that you don't want to go through a file because of managing the temp files.  What I have done is create my files with the session ID as part of the name (so it will be unique per session) and then I just clean out all the old sessions periodically (every 10 times a session is created or something)
0
 
LVL 4

Author Comment

by:j_s_kelley
ID: 24297425
Thanks for the info but as the question refers to I am using ASP.NET 3.5.  This is a web page, not a windows form.  This will eventually become an <img> tag or an <input Type="image> tag.  I need the SRC for this.  Normally, it is a file.
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
LVL 4

Author Comment

by:j_s_kelley
ID: 24297456
To RPCIT, I did want to get away from temp files which is why I put the info in the DB to begin with.  I would also like to apply this technique to pages which may pull up many small images (say a catalog).  This would be a nightmare of file access on the server.  I also have other security considerations imposed by the network admins (I know, I know...)
0
 
LVL 33

Accepted Solution

by:
Todd Gerbert earned 500 total points
ID: 24297466
I have a similar issue with sending PDF's, and I found it not a problem to use a separate ASPX to send the content by modifying the headers. However, I still use an intermediary file, but at first glance at docs it looks like you can use Response.BinaryWrite(byte[]).


Response.ClearHeaders();
Response.ContentType = "image/jpeg";
Response.Clear();
Reponse.BinaryWrite(imageBytes);
Response.BufferOutput = true;

Open in new window

0
 
LVL 4

Author Closing Comment

by:j_s_kelley
ID: 31577653
Thanks.  This is the way I am going to do it.  I removes the need for the temp file.  Plus, you have some extra code in there to make the transfer cleaner so I am going to modify my page to do what you are doing.  Thanks.
0
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 24297573
This little test worked for me...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<img src="GetPicture.aspx?SomePicID" />
</body>
</html>
public partial class GetPicture : System.Web.UI.Page
{
	private byte[] GetImage(string ImageId)
	{
		byte[] buffer;
		FileStream fs = File.Open(Server.MapPath("~/test.gif"), FileMode.Open);
		buffer = new byte[fs.Length];
		fs.Read(buffer, 0, (int)fs.Length);
		fs.Close();
		return buffer;
	}
 
    protected void Page_Load(object sender, EventArgs e)
    {
		byte[] imageBytes = GetImage(Request.QueryString["ImageID"]);
 
		Response.ClearHeaders();
		Response.ContentType = "image/gif";
 
		Response.Clear();
 
		Response.BinaryWrite(imageBytes);
    }
}

Open in new window

0
 
LVL 6

Expert Comment

by:RPCIT
ID: 24297579
I like that tgerbert... I will have to play with it
0
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 24297592
Of course, you'd need to replace the GetImage() function with your code that retrieves the bytes from the database! ;)

Also, you can refer to <img src="/yourpage.aspx?PicID=PictureDBId"> to re-use the same ASPX for all your images.
0

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Hello there! As a developer I have modified and refactored the unit tests which was written by fellow developers in the past. On the course, I have gone through various misconceptions and technical challenges when it comes to implementation. I would…
Native ability to set a user account password via AD GPO was removed because the passwords can be easily decrypted by any authenticated user in the domain. Microsoft recommends LAPS as a replacement and I have written an article that does something …
Watch the working video to know how to import Outlook PST/OST files to Amazon WorkMail. Kernel released this tool which is very easy to use and migrate single or multiple PST and OST files to Amazon WorkMail. To know more about Kernel Import PST to …
Wrapper-1-Query. Use an Excel function to calculate a column for an Access query. Part 1. Shows a query in Access that has a calculated column with the results of an Excel worksheet function. See how to call a wrapper function from a query, and …

587 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question