Por volta de setembro do ano passado, eu estava trabalhando em uma função para gerar imagens. Claro, existem vários métodos. As imagens geradas foram colocadas em um determinado diretório no servidor e excluídas após um período de tempo. , o que foi muito problemático, mas encontrei este parágrafo do código, hoje vi como usar o arquivo .ashx para processar IHttpHandler para implementar o envio de texto e dados binários. De repente, descobri que esse uso foi bem discutido. Talvez o documento oficial chinês não o apresentasse em detalhes e recomendasse outro método.
//------------------------------------------------------
//Escolha seu formato de imagem favorito
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//------------------------------------------------------
// Armazena a imagem do gráfico em Session para ser capturada por um HttpHandler posteriormente
//------------------------------------------
HttpContext ctx = HttpContext.Current;
string chartID = Guid.NewGuid().ToString();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
Existe a seguinte frase em chart.ashx
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
Na verdade, você também pode usar isso em vez de
adicionar<httpHandlers>
a <system.web> em web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " activate="false" /> /*ChartHandler é o código Assembly gerado após a compilação de ashx.cs*/
<!--Como estamos capturando todas as solicitações depois disso, certifique-se de que Error.aspx não dependa de .Text -->
<add verbo="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
Não importa qual você usa. O último é mais conveniente depois de configurado, não importa o caminho. Na verdade, a aplicação dessa ideia é bem conhecida em .text, mas a direção da aplicação é diferente. .
O código do arquivo ashx.cs
usando System;
usando System.Web.SessionState;
usando System.IO;
usando
o espaço para nome AspNetResources.Owc;
{
classe pública ChartHandler: IHttpHandler, IReadOnlySessionState
{
bool público IsReusable
{
obter {retornar verdadeiro};
}
ProcessRequest público vazio (HttpContext ctx)
{
string chartID = ctx.Request.QueryString[0];
Matriz arr = (matriz) ctx.Session[chartID]
;
ctx.Response.Expires = 0;
ctx.Response.Buffer = verdadeiro;
ctx.Response.Clear();
MemoryStream memStream = novo MemoryStream ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close()
;
ctx.Response.StatusCode = 200;
ctx.Response.End()
;
}
}