Använd Generic handler för att visa bilder
Ni har säkert sätt att på en del hemsidor så använder dom till exempel: www.minsida.se/Image.ashx?path=bild.jpg istället för www.minsida.se/bild.jpg. Det finns en del sätt att göra detta på. Det jag tänkte visa är med en Generic handler.
Högerklicka på ditt projekt/website och välj Add new item och leta upp Generic handler. När den filen skapas så kommer den classen att se ut såhär.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Image : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
}
Vi kan ta bort
[WebService(Namespace = "http://tempuri.org/")] och
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] i topen på våran class. Dom behöver inte. Sedan tar vi bort allt innan för
ProcessRequest(...){ all kod här }.
Sedan skriver vi in detta
if (context.Request.QueryString["path"] != null)
{
/// Här ska våran kod in senare
}
else
{
}
Om något finns efter = så kommer den gå in i if(..) och köra vidare. om inte så kör den vidare i else där man kan skriva in ett fel meddelanden om man vill.
Sedan behöver vi skapa en string som vi kallar imgUrl där vi fångar upp det som står efter = i webbadressen.
string imgUrl = context.Server.MapPath("~/" + context.Request.QueryString["path"]);
context.Server.MapPath(...) laddar den filen vi vill komma åt. Sedan måste vi ta reda på ifall det är en .jpg, .gif eller .png bild.
Det gör vi lättast såhär:
if (imgUrl.EndsWith("jpg"))
{
context.Response.ContentType = "image/jpeg";
context.Response.TransmitFile(imgUrl);
}
else if (imgUrl.EndsWith("gif"))
{
context.Response.ContentType = "image/gif";
context.Response.TransmitFile(imgUrl);
}
else if (imgUrl.EndsWith("png"))
{
context.Response.ContentType = "image/png";
context.Response.TransmitFile(imgUrl);
}
else
{
context.Response.Write("fel bildformat");
}
Både stringen och koden ovan klistra vi in imellan if(context.Request.Querystring["path"] != null)
Våran slutliga kod blir såhär
public class Image : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString["path"] != null)
{
string imgUrl = context.Server.MapPath("~/" + context.Request.QueryString["path"]);
if (imgUrl.EndsWith("jpg"))
{
context.Response.ContentType = "image/jpeg";
context.Response.TransmitFile(imgUrl);
}
else if (imgUrl.EndsWith("gif"))
{
context.Response.ContentType = "image/gif";
context.Response.TransmitFile(imgUrl);
}
else if (imgUrl.EndsWith("png"))
{
context.Response.ContentType = "image/png";
context.Response.TransmitFile(imgUrl);
}
else
{
context.Response.Write("error");
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
Då kommer man kunna använda Image.ashx såhär: www.minsida.se/Image.ashx?path=bild.jpg