2014-04-06 104 views
1

我想將圖像保存到已存儲在內存流中的文件。使用保存到內存流的圖像導出文件

我已將asp.net圖表保存到內存流中。

stream1 = new MemoryStream(); 
chart_location_3.SaveImage(stream1, ChartImageFormat.Png); 

然後我使用下面的代碼導出爲jpg。它觸發保存提示,並創建文件,但圖像將無法打開(「這不是一個有效的位圖文件,或目前不支持其格式」)

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 

System.Drawing.Image img; 

img = System.Drawing.Image.FromStream(stream1); 
response.ClearContent(); 
response.Clear(); 
Response.ContentType = "image/jpg"; 
response.AddHeader("Content-Disposition", "attachment; filename= Exported.jpg;"); 
response.Write(img); 
response.Flush(); 
response.End(); 

回答

4

變化的響應寫:

response.BinaryWrite(stream1.ToArray()); 
0

我用這樣的事情之前:

http://www.dotnetperls.com/ashx

它生成圖像瀏覽器在飛行中。希望能幫助到你。


根據dotnetperls的答案,它使用response.binarywrite。如下更改代碼:

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 

System.Drawing.Image img; 

img = System.Drawing.Image.FromStream(stream1); 
response.ClearContent(); 
response.Clear(); 
Response.ContentType = "image/jpg"; 
response.AddHeader("Content-Disposition", "attachment; filename= Exported.jpg;"); 
response.BinaryWrite(img); 
response.Flush(); 
response.End(); 
+0

不使用的內存,雖然流.. – Chris

+0

也許嘗試Response.BinaryWrite代替的Response.Write –

0
public HttpResponseMessage GetStatChart() 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 

     var chartImage = new Chart(600, 400); 
     chartImage.AddTitle("Chart Title"); 
     chartImage.AddSeries(
       name: "Employee", 
       chartType: "Pie", 
       axisLabel: "Name", 
       xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" }, 
       yValues: new[] { "2", "6", "4", "5", "3" }); 
     byte[] chartBytes = chartImage.GetBytes(); 

     response.Content = new ByteArrayContent(chartBytes); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 

     return response; 



    } 
+0

使用Web API 2和 Scott