FileHandler to process binary field

public class FileHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {

        HttpResponse Response = HttpContext.Current.Response;
        HttpRequest Request=HttpContext.Current.Request;
        Response.Expires = 0;
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        if (Request.QueryString["fid"] != null)
        {
            ProductItem pi= new ProductItemRepository().GetById(Request.QueryString["fid"]);

            if (pi != null && pi.pi_image != null && pi.pi_file_name != null)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + pi.pi_file_name.Trim());
                Response.ContentType = "application/octet-stream";

                byte[] buffer = pi.pi_image.ToArray() as byte[];

                if (Request.QueryString["t"] != null)
                {
                    string t=Request.QueryString["t"];
                    int n;
                    Int32.TryParse(t, out n);
                    if (n == 1)
                    {
                        //Converts the byte array to memory stream, then resize the image, then convert back
                        using (MemoryStream ms = new MemoryStream(buffer))
                        {
                            using (Image image = Image.FromStream(ms))
                            {
                                using (MemoryStream stream = new MemoryStream())
                                {
                                    Image img = image.GetThumbnailImage(40, 40, null, new IntPtr());
                                    img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                                    buffer = stream.ToArray();
                                }
                            }
                        }
                    }
                }
                Response.BinaryWrite(buffer);
            }
        }
        Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
Advertisement