ประมาณเดือนกันยายนปีที่แล้ว ฉันกำลังทำงานเกี่ยวกับฟังก์ชันเพื่อสร้างรูปภาพ แน่นอนว่ามีหลายวิธี รูปภาพที่สร้างขึ้นถูกวางไว้ในไดเร็กทอรีที่กำหนดบนเซิร์ฟเวอร์ และถูกลบออกหลังจากผ่านไประยะหนึ่ง ซึ่งยุ่งยากเกินไป แต่ฉันพบรหัสย่อหน้านี้ วันนี้ฉันเห็นวิธีใช้ไฟล์ .ashx เพื่อประมวลผล IHttpHandler เพื่อดำเนินการส่งข้อความและข้อมูลไบนารี ทันใดนั้นฉันก็พบว่ามีการพูดถึงการใช้งานนี้เป็นอย่างดี บางทีเอกสารทางการของจีนอาจไม่ได้แนะนำโดยละเอียด จึงแนะนำวิธีอื่นแทน
-
//เลือกรูปแบบภาพที่คุณชื่นชอบ
-
ไบต์[] byteArr = (ไบต์[]) oChartSpace.GetPicture ("png", 500, 500);
-
// เก็บภาพแผนภูมิไว้ในเซสชันเพื่อให้ HttpHandler หยิบขึ้นมาในภายหลัง
-
HttpContext ctx = HttpContext.ปัจจุบัน;
สตริงchartID = Guid.NewGuid ().ToString ();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
มีประโยคต่อไปนี้ใน Chart.ashx
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
ที่จริงแล้ว คุณสามารถใช้สิ่งนี้แทน
การเพิ่ม<httpHandlers>
ใน <system.web> ใน web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler คือชุดโค้ดที่สร้างขึ้นหลังจากคอมไพล์ ashx.cs*/
<!--เนื่องจากเรารับคำขอทั้งหมดหลังจากนี้ โปรดตรวจสอบให้แน่ใจว่า Error.aspx ไม่ได้ใช้ .Text -->
<เพิ่มกริยา = "*" path = "Error.aspx" type = "System.Web.UI.PageHandlerFactory" />
</httpHandlers>
ไม่สำคัญว่าคุณจะใช้อันไหน รูปแบบหลังจะสะดวกกว่าเมื่อกำหนดค่าแล้ว ไม่ว่าเส้นทางจะเป็นเช่นไรก็ตาม จริงๆ แล้วการประยุกต์ใช้แนวคิดนี้เป็นที่รู้จักกันดีใน .text แต่ทิศทางของแอปพลิเคชันจะแตกต่างออกไป .
รหัสของไฟล์ ashx.cs
โดยใช้ระบบ
โดยใช้ System.Web.SessionState;
ใช้ System.IO;
ใช้ System.Web;
เนมสเปซ AspNetResources.Owc
-
ChartHandler คลาสสาธารณะ: IHttpHandler, IReadOnlySessionState
-
บูลสาธารณะ IsReusable
-
รับ { คืนค่าจริง }
-
ProcessRequest โมฆะสาธารณะ (HttpContext ctx)
-
สตริงchartID = ctx.Request.QueryString[0];
อาร์เรย์ arr = (อาร์เรย์) ctx.เซสชัน [chartID]
;
ctx.Response.หมดอายุ = 0;
ctx.Response.Buffer = จริง;
ctx.Response.Clear ();
MemoryStream memStream = MemoryStream ใหม่ ((ไบต์ []) arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close ();
ctx.Response.ContentType = "รูปภาพ/png";
ctx.Response.StatusCode = 200;
ctx.การตอบสนองสิ้นสุด ();
}
-
-