2010-10-06 18 views
6

** * ***Editing post per esempio di codice più recente sulla base dei commenti* *** ***Come posso chiamare una pagina aspx e farla restituire un'immagine?

Quindi, per essere chiari, non ho due file. Il primo file è denominato FinalImage.aspx e qui è il codice per quella pagina:

<html> 
    <body> 
    <img src="newpage.aspx" /> 
    </body> 
</html> 

newpage.aspx ha il seguente codice, sulla base del campione di Jason nei commenti qui sotto:

<%@ Page Language="C#" %> 

<script runat="server" language="c#"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "image/png"; 
     byte[] data = System.IO.File.ReadAllBytes("http://mystatus.skype.com/smallclassic/eric-greenberg"); 

     Response.OutputStream.Write(data, 0, data.Length); 
     Response.OutputStream.Flush(); 
     Response.End(); 
    } 

</script> 

Se io chiama FinalImage.aspx. Vedo un'immagine spezzata.

Se chiamo newpage.aspx direttamente, ho un "Formati URI non sono supportati errore"

Credo che il suo vicino, però.

Inoltre, per chiunque stia leggendo questo, questa soluzione è necessaria per aggirare il fatto che skype non ha un'opzione https per i suoi pulsanti skype che indicano lo stato dell'utente skype. La creazione di questa pagina proxy consentirà di funzionare senza causare un avviso di sicurezza "misto" nel browser.

+0

Non credo 'File.ReadAllBytes' supporto URI formato, è solo per i file locali.È necessario creare una richiesta Web e scaricare i byte. –

risposta

8

Quindi, qui era il codice finale di lavoro: Grazie a tutti per il vostro aiuto rintracciando questo giù poco a poco (si fa per dire ...)

<%@ Page Language="C#" %> 

<script runat="server" language="c#"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "image/png"; 

     System.Net.WebClient wc = new System.Net.WebClient(); 

     byte[] data = wc.DownloadData("http://mystatus.skype.com/smallclassic/eric-greenberg"); 
     Response.OutputStream.Write(data, 0, data.Length); 
     Response.OutputStream.Flush(); 
     Response.End(); 
    } 
</script> 
0

È necessario impostare il tipo di contenuto su "immagine/jpg" o immagine MIME pertinente.

  Response.ContentType = "Image/jpg"; 
+0

Dove lo farei? – ericgr

+0

Vedere l'aggiornamento. Nel caricamento della pagina. Non hai bisogno di immagini e controlli. Solo il codice – Aliostad

3

Giusto per ampliare la risposta di Aliostad, ecco un frammento che potrebbe aiutare:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.ContentType = "image/jpeg"; 

    var data = // .... get the content of the images as bytes. e.g. File.ReadAllBytes("path to image"); 

    Response.OutputStream.Write(data, 0, data.Length); 
    Response.OutputStream.Flush(); // Not sure if needed, but doesn't hurt to have it. 
    Response.End(); 
} 

Non sono sicuro se quanto precede è corretta al 100%, ma ho fatto usare qualcosa di simile di recente su un progetto per restituire immagini da una pagina di aspx. Sfortunatamente, non ho quel codice davanti a me ora.

+0

OK - così finora, ho un file chiamato "FinalImage.aspx" che ha solo tag HTML e un tag immagine in esso con il suo src impostato su newpage.aspx. – ericgr

+0

schifo - non è stato finito con il commento: newpage.aspx ha praticamente il vostro esempio in esso: <% @ Page Language = "C#" %> ericgr

+0

sai cosa - io sono di riferimento per modificare il post originale e vedere se funzionerà. Stai pronto, per favore. – ericgr

1

Per espandere ulteriormente (sulla risposta di Jason), non si desidera leggere il flusso di risposta in uno StreamReader (poiché il risultato non è testo). Quello che puoi fare usa la pagina aspx come src della tua immagine sulla pagina che ne ha bisogno. Per esempio:

<html> 
    <image src="~/MyDynamicImage.aspx"/> 
</html> 

Perché MyDynamicImage.aspx restituisce un'immagine come la sua risposta, può essere trattata come un'immagine (come se si stesse indicando un jpg statica, per esempio).

0

È possibile utilizzare il codice pubblicato in precedenza nel metodo ProcessRequest di una classe che implementa IHttpHandler. Questo è un po 'più leggero rispetto a farlo con una pagina in quanto si eviterà il ciclo di vita della pagina.

C'è un esempio su http://wiki.asp.net/page.aspx/687/http-handlers-to-handle-images/. È un po 'più impegnato di quello che ti serve, ma dovresti essere in grado di modificarlo in base alle tue esigenze.

Problemi correlati