[ASP.NET] 在頁面上顯示上傳的圖片

摘要:[ASP.NET] 在頁面上顯示上傳的圖片

這幾天同事剛好遇到一個問題

想要讀取圖片並顯示在頁面上

因此小弟做了一個範例

順便做個紀錄

 


#前台程式碼...建立上傳檔案頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="A3.aspx.cs" Inherits="A3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload runat="server" ID="filMyFile" />
        <asp:Button Text="Click" ID="btn_Go" UseSubmitBehavior="false" runat="server" OnClick="btn_Go_Click" />
        <br />
        <asp:Image runat="server" ID="img" />
    </div>
    </form>
</body>
</html>

 

 


// 後台程式碼

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class A3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btn_Go_Click(object sender, EventArgs e)
    {
        if (filMyFile.PostedFile != null)
        {
            ////1. 圖片直接顯示在本頁面上
            //// File was sent
            //HttpPostedFile myFile = filMyFile.PostedFile;

            //// 抓取上傳檔案的大小
            //int nFileLen = myFile.ContentLength;

            //// 設定buffer大小
            //byte[] myData = new byte[nFileLen];
            //myFile.InputStream.Read(myData, 0, nFileLen);
            //Response.Clear();
            //Response.ContentType = "image/jpeg";
            //Response.BinaryWrite(myData);

            //2. 圖片顯示在IMAGE的控件上
            // File was sent
            HttpPostedFile myFile = filMyFile.PostedFile;

            Session["myFile"] = myFile;

            // Set ImageUrl
            img.ImageUrl = "showImage.ashx";
        }
    }
}

 

 


// 建立showImage.ashx

<%@ WebHandler Language="C#" Class="showImage" %>

using System;
using System.Web;
using System.Web.SessionState;

public class showImage : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");

        if (context.Session["myFile"] != null)
        {
            HttpPostedFile myFile = (HttpPostedFile)context.Session["myFile"];
            int nFileLen = myFile.ContentLength;
            // Allocate a buffer for reading of the file

            byte[] myData = new byte[nFileLen];
            myFile.InputStream.Read(myData, 0, nFileLen);
            context.Response.Clear();
            context.Response.ContentType = "image/jpeg";
            context.Response.BinaryWrite(myData);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

 







Y2J's Life:http://kimenyeh.blogspot.tw/