通过asp.net中的.ashx访问本地映像

时间:2012-01-27 12:45:28

标签: c# asp.net sql

我正在使用ashx文件从数据库中检索图像。 如果它在数据库中不可用,它将显示我的内部的另一个图像 项目文件夹。但我无法访问本地图像。 任何人都可以帮助我或建议吗?

我的代码:

public void ProcessRequest (HttpContext context) 
{
    context.Response.ContentType = "text/plain";
    string Value = (string)context.Session["UserID"];
    Stream strm = ShowEmpImage(Value);
    if (strm == null)
    {
        byte[] imageBytes = File.ReadAllBytes("~/images/photo_not_available.png" + context.Request["image"]);
        context.Response.ContentType = "image/png";
        context.Response.BinaryWrite(imageBytes);          
    }
    else
    {
        byte[] buffer = new byte[4096];
        int byteSeq = strm.Read(buffer, 0, 4096);

        while (byteSeq > 0)
        {
            context.Response.OutputStream.Write(buffer, 0, byteSeq);
            byteSeq = strm.Read(buffer, 0, 4096);
        }
    }   
   //context.Response.BinaryWrite(buffer);
}

ThnnQ

2 个答案:

答案 0 :(得分:2)

这里肯定你有一个错误,你添加了图像文件名,还有一个变量 - 这肯定是一个不存在的文件。

byte[] imageBytes = 
File.ReadAllBytes("~/images/photo_not_available.png" + context.Request["image"]);

这里的第二个错误是你没有制作你的〜

的MapPath
    byte[] imageBytes = File.ReadAllBytes(
content.Request.MapPath("~/images/photo_not_available.png"));

或者您可以将其称为@zapthedingbat建议。

还有一个问题,你从

开始
 context.Response.ContentType = "text/plain";

然后将其更改为

context.Response.ContentType = "image/png";

答案 1 :(得分:1)

您可以使用HttpResponse.TransmitFile方法

吗?
Response.TransmitFile(context.Request.MapPath("~/images/photo_not_available.png"));