2014-08-29 114 views
0

我在C#中创建了一个Ashx处理程序,它根据传递给我的fileid参数为我提供图像。我也有一个我写的简单的工具提示预览脚本,它不起作用。您可以看到图像加载,但加载后,图像就消失了。ASP.NET处理程序无法正常工作

我怀疑问题是在ASHX处理程序,因为如果我使用静态图像,它工作得很好。这里是我的ASHX处理程序代码:

public void ProcessRequest(HttpContext context) 
    { 
     string fileId = HttpUtility.UrlDecode(context.Request.QueryString["fileId"] ?? "") ?? ""; 
     string fullFileName = context.Server.MapPath("~/Uploads") + "\\" + fileId; 

     using (FileStream s = File.Open(fullFileName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      context.Response.ContentType = HelperClasses.Utility.GetMimeTypeFromMagic(fullFileName); 

      var buffer = new byte[s.Length]; 
      s.Read(buffer, 0, (int) s.Length); 

      context.Response.BinaryWrite(buffer); 
      context.Response.Write(buffer); 

      s.Close(); 
     } 
     context.Response.Flush(); 
     context.Response.Close(); 
    } 

另外,我创建a fiddle来证明这个问题。

+0

嘿我认为它的这个问题与铬,http://stackoverflow.com/questions/22219565/iis-chrome-failed-to-load-resource-neterr-incomplete-chunked-encoding – 2014-08-29 17:01:13

+0

你的处理程序是好的;如果我将URL插入浏览器,我会看到图像。 – 2014-08-29 17:07:02

+0

'GetMimeTypeFromMagic'(真棒方法名称btw)是否返回正确的内容类型? – PoweredByOrange 2014-08-29 17:08:27

回答

0

您在响应结束时抛出垃圾,具体是因为除BinaryWrite之外您还打电话Response.Write。如果你看一下你的处理程序的响应,这是在年底(直译):

System.Byte []

enter image description here

显然不是图像的一部分。此行应被删除:

context.Response.Write(buffer); 

我也avoid会做这样Response.EndResponse.Close什么。让ASP.NET运行时处理这一点。

更好

的是,如果您使用的是.NET框架4或以上,可以简化整个事情到这一点:

s.CopyTo(context.Response.OutputStream);