problem med billede i form af (ashx) og System.Drawing.Image
Hej Eksperter,Jeg har et problem jeg sidder og arbejder med en billedet editor, hvilket ikke er det store problem men de billeder jeg skal hente ind i editoren bliver genereret af en generic handler, og denne virker også som den skal men når jeg prøver at hente det billedet der skal editeres så kommer problemmet. Det er dette kode der fejler
System.Drawing.Image OldImage = System.Drawing.Image.FromFile(Server.MapPath(GetImages.ashx?Img=testimg.jpg));
Den første fejl jeg får er :
GetImages.ashx?Img=testimg.jpg, is not a valid virtual path
Hvorfor fejler Server.MapPath her ? hvis GetImages.ashx?Img=testimg.jpg havde været testimg.jpg virker det ?
Hvis jeg ændre Server.MapPath(GetImages.ashx?Img=testimg.jpg) til c://testsite/GetImages.ashx?Img=testimg.jpg
så får jeg denne fejl :
Illegal characters in path.
Jeg går udfra at det er ? der er problemmet men hvis jeg HttpServerUtility.UrlEncode'er stien så er stien forkert hvordan gør man det.
og til sidst hvis jeg fjerner ?Img=testimg.jpg delen og hardcoder denne i ashx filen så får jeg denne fejl:
out of memory
Er der nogle der ved hvorfor dette sker?
her er koden i min ashx fil:
<%@ WebHandler Language="C#" Class="GetFileInEditor" %>
using System;
using System.IO;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
public class GetFileInEditor : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string Image = "images/Temp/";
if (string.IsNullOrEmpty(context.Request.QueryString["Img"]) == true)
{
Image = "images/ui/website_edit.jpg";
}
else {
Image += context.Request.QueryString["Img"].ToString();
}
System.Drawing.Image ReturnImage = System.Drawing.Image.FromFile(context.Server.MapPath(Image));
System.IO.FileInfo ImageInfo = new System.IO.FileInfo(context.Server.MapPath(Image));
string ReturnContentType = "image/jpeg";
MemoryStream memStream = new MemoryStream();
switch (ImageInfo.Extension)
{
case ".jpeg":
ReturnImage.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case ".jpg":
goto case ".jpeg";
case ".gif":
ReturnImage.Save(memStream, System.Drawing.Imaging.ImageFormat.Gif);
ReturnContentType = "image/gif";
break;
case ".png":
ReturnImage.Save(memStream, System.Drawing.Imaging.ImageFormat.Png);
ReturnContentType = "image/png";
break;
case ".bmp":
ReturnImage.Save(memStream, System.Drawing.Imaging.ImageFormat.Bmp);
ReturnContentType = "image/bmp";
break;
default:
goto case ".jpeg";
break;
}
memStream.Close();
ReturnImage.Dispose();
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
context.Response.Cache.SetExpires(DateTime.MinValue);
context.Response.ContentType = ReturnContentType;
context.Response.BufferOutput = false;
context.Response.OutputStream.Write(memStream.GetBuffer(), 0, memStream.GetBuffer().Length);
memStream.Dispose();
}
public bool IsReusable {
get {
return false;
}
}
}