2010-10-06 57 views
6

** * ***編輯後,以新的代碼示例基於評論* ** * ***如何調用aspx頁面並讓它返回圖片?

所以,要清楚,我有兩個文件。第一個文件叫做FinalImage.aspx,這裏是該頁面的代碼:

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

newpage.aspx具有下面的代碼的基礎上,傑森在下面的評論樣本:

<%@ 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> 

如果我調用FinalImage.aspx我看到一個破碎的圖像。

如果我newpage.aspx直接打電話,我得到一個「URI格式不支持錯誤」

我認爲它接近,雖然。

而且,對於任何人只是讀這篇文章,需要此解決方案來解決的事實,Skype不擁有它的Skype按鈕,告訴Skype的用戶的狀態的HTTPS選項。創建此代理頁面將允許此操作在瀏覽器中不會導致「混合」安全警報的情況下運行。

+0

我不認爲'File.ReadAllBytes'支持URI格式,它只適用於本地文件。您需要創建WebRequest並下載字節。 – 2010-10-06 16:49:49

回答

8

所以,這裏是最後的工作代碼:感謝大家的幫助跟蹤下來的點點滴滴(這麼說......)

<%@ 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

您需要設置內容類型爲「圖像/ JPG」或相關的圖像MIME。

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

我該怎麼做? – ericgr 2010-10-06 14:54:23

+0

查看更新。在頁面加載。你不需要任何視覺和控制。只是代碼。 – Aliostad 2010-10-06 15:02:47

3

只是對Aliostad的答案擴大,這裏有一個片段,它可以幫助你:

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(); 
} 

不知道上面是100%正確的,但我最近在一個項目中使用類似的東西從aspx頁面返回圖像。不幸的是,我現在沒有那個代碼在我面前。

+0

行 - 所以到目前爲止,我有一個名爲「FinalImage.aspx」的文件,其中只有Html標籤和一個圖片標籤,其src設置爲newpage.aspx。 – ericgr 2010-10-06 16:40:03

+0

廢話 - 沒有完成與評論: newpage.aspx中有相當多的例子: <%@頁面語言= 「C#」 %> ericgr 2010-10-06 16:40:52

+0

你知道嗎 - 我要去編輯原始文章,看看是否會工作。請等一下。 – ericgr 2010-10-06 16:41:24

1

爲了進一步擴大(在傑森的回答),你會不會想讀響應流成一個StreamReader(如結果不文本)。你可以做什麼使用aspx頁面作爲你需要它的頁面上的圖像的src。例如:

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

因爲MyDynamicImage.aspx返回圖像作爲其響應,它可以治療作爲的圖像(因爲如果你是指向一個靜態.JPG,例如)。

0

您可以使用上面實現了IHttpHandler類的ProcessRequest方法發佈的代碼。這比使用Page做一個更輕量級,因爲您將避免頁面生命週期。

有一個在http://wiki.asp.net/page.aspx/687/http-handlers-to-handle-images/一個例子。這比你需要的要多一點,但你應該能夠根據你的需求進行修改。

相關問題