ASP.NET从.aspx链接返回图像

时间:2010-02-12 16:17:28

标签: asp.net

当用户点击另一个ASP.NET页面的链接时,是否可以将图像(或任何文件类型)输出到下载链接?

我有文件名和byte []。

<a href="getfile.aspx?id=1">Get File</a>

...其中getfile返回文件而不是转到getfile.aspx页面。

7 个答案:

答案 0 :(得分:19)

你真的想要.ashx for that;)

public class ImageHandler : IHttpHandler 
{ 
  public bool IsReusable { get { return true; } } 

  public void ProcessRequest(HttpContext ctx) 
  { 
    var myImage = GetImageSomeHow();
    ctx.Response.ContentType = "image/png"; 
    ctx.Response.OutputStream.Write(myImage); 
  } 
}

答案 1 :(得分:5)

How to Create Text Image on the fly with ASP.NET

这样的事情:

string Path = Server.MapPath(Request.ApplicationPath + "\image.jpg");
Bitmap bmp = CreateThumbnail(Path,Size,Size);
Response.ContentType = "image/jpeg";
bmp.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Dispose();

答案 2 :(得分:4)

以下是我过去的做法:

Response.Clear();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", string.Format("inline;filename=\"{0}.pdf\"",Guid.NewGuid()));
Response.ContentType = @"application/pdf";
Response.WriteFile(path);

答案 3 :(得分:1)

是的,您必须完全清除响应,并将图像字节数据替换为字符串,并且您需要确保根据图像类型设置内容类型的响应标头

答案 4 :(得分:1)

是的,这是可能的。您需要设置Response对象的两个部分:Content-Type和HTTP Header。 MSDN documentation包含响应对象的详细信息,但主要概念非常简单。只需将代码设置为类似的内容(对于Word文档)。

Response.ContentType="application/ms-word";
Response.AddHeader("content-disposition", "attachment; filename=download.doc");

有一个更完整的示例here

答案 5 :(得分:0)

getfile.aspx的代码隐藏代码必须有content-type,浏览器会知道它是图像或未知文件,并允许您保存它。

在asp.net中,您可以使用ContentType对象设置Response,即

Response.ContentType = "image/GIF"

Here您有动态生成图片的教程

答案 6 :(得分:0)

...的ashx

public class ImageHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext ctx)
    {
       string path = ".....jpg";

                byte[] imgBytes = File.ReadAllBytes(path);
                if (imgBytes.Length > 0)
                {
                    ctx.Response.ContentType = "image/jpeg";
                    ctx.Response.BinaryWrite(imgBytes);
                }
    }

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