C# 无法打印/保存System.Drawing和Response.OutputStream生成的图像

C# 无法打印/保存System.Drawing和Response.OutputStream生成的图像,c#,asp.net,C#,Asp.net,我在执行网页并通过Response.OutputStream将创建的图像发送到浏览器时,打印/保存有问题 我有一个简单的功能: private void makepng() { // INFO: the MyBitmapFile bitmap is created here, and then streamed to browser below: Response.Clear(); Response.ClearHead

我在执行网页并通过Response.OutputStream将创建的图像发送到浏览器时,打印/保存有问题

我有一个简单的功能:

 private void makepng()
 {            
        // INFO: the MyBitmapFile bitmap is created here, and then streamed to browser below:

        Response.Clear();
        Response.ClearHeaders();
        Response.ContentType = "image/png";

        using (MemoryStream ms = new MemoryStream())
        {
            MyBitmapFile.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            ms.WriteTo(Response.OutputStream);
        }
        Response.End();
 }
它还会在浏览器中显示图像,但您不能打印或右键单击图像并保存

  • 如果我这样做,就会出现一个弹出错误,显示“正在保存或检索的文件类型已被阻止。”

  • 如果我调用
    makepng()
    作为
    protectedvoid页面加载(objectsender,EventArgs e)
    中的唯一内容,那么所有工作和我都可以打印/保存

  • 但是如果我点击一个按钮调用它,那么图像就会显示出来,但是我不能打印/保存它-并且会得到上面的错误


我想问题出在回发按钮上,但我不知道如何让它工作。

也许你应该添加一个文件名<代码>Response.AppendHeader(“内容处置”,“附件;文件名=test.png”)长度也是<代码>Response.AppendHeader(“Content-Length”,ms.Length.ToString())在语句
MyBitmapFile.Save(ms,System.Drawing.Imaging.ImageFormat.Png)之后插入以下内容:
ms.Position=0。您需要倒带内存流,否则它将不会向输出流写入任何内容。第一种设置文件名的方法实际上是可行的,但是浏览器会下载文件,这也很好——但是图像不会显示在浏览器中。但是我可以接受它,那么用户只需在查看之前保存文件。其他两种解决方案不起作用。