[ASP.net] 用Response作Image 輸出,並可控制權限

2012-10-05


一個小技巧可以很神奇的將一個.aspx變成圖片..
因為利用這種方式可以處理一些有關於是否有能力讀取圖片權限問題…
所以在案例設計中..
如果您沒有透過get方式帶入tk 此參數而且此參數的內容必須要是1234的話.
將會顯示 你無能力讀取此圖

首先打開一個ASP.net 專案..
看一下.aspx 檔案..
將除了第一行以外的資料..選取..刪除





只有留下..
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="OutputImageSample._Default" %>




沒有這一行程式會跑不起來阿…

接下來我們就看一下 C# 那一端的程式碼..

using System;

namespace OutputImageSample
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //判斷是否帶入tk參數,並且判斷是否正確
            if (Request["tk"] == null || Request["tk"]!="1234")
            {
                Response.Write("你無能力讀取此圖");
            }
            else
            {
                //設定 ContentType 為 jpg圖片
                Response.ContentType = "image/jpeg";
                //注意這邊要用writefile 其中帶入圖片路徑
                Response.WriteFile("01lab.jpg");
                //將buffer 中的stream全部送出
                Response.Flush();
            }
           
        }
    }
}


其中注意如果您要輸出的不是圖片 是其他格式 務必注意一下 您設定的 ContentType..

這時候我們run 起來並且把tk參數帶錯..
結果是:


我們把參數帶正確..
結果:


所以之後 您可以在其他頁面中加入 <img src='http://localhost:60291/Default.aspx?tk=1234' />
就會顯示正確圖片…
當然這可以應用得很多,譬如控制圖片被讀取的次數,讀取的權限,這就可以有很多種發揮了…
有人會問說讀一張圖片而已怎麼會要這麼麻煩..
沒錯,所以要看需求...
這樣做有
優點是..
1.隱藏圖片真實位置,就範例看來你壓根不會知道我給你的圖案是 01lab.jpg
2.控制讀取時間,假設我設定只有Server時間 1:00 ~2:00可以讀取,可以在C# 中作控制
3.控制權限
缺點是:
1.要寫Code
2.會比直接讀取圖片還要來的耗效能一點點,畢竟讀張圖片,Server還要跑你寫的程式
ps. http://ianjung1974.blogspot.com/2009/03/content-type.html 這邊有列舉許多 ContentType 必要時可以查查…

讚一下:

範例下載:


當麻許的超技八 2014 | Donma Hsu Design.