asp.net2.0推荐一个功能强大的图片选择控件

在做网站的时候,很多情况用到图片上传与选择。FreeTextBox控件里用一个图片选择控件,我觉得很好,就单独拿出来用了。
1、建立TestImgSelect网站,建立images文件夹,在images里建立face文件夹用来存放头像,图片如下:

5.gif

8.gif

9.gif

10.gif

2、建立user文件夹,在里面建立SelectImage.aspx文件和Default.aspx文件
3、SelectImage.aspx代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SelectImage.aspx.cs" Inherits="user_SelectImage" %>
<!--DOCTYPE不能换,否则滚动条不正确 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml" >
    
<head>
        
<title>
            选择图片
        
</title>
        
<!--
        加入时效控制以让其响应服务器端事件,加入回发目标,以不弹出另一个界面
        
-->
        
<meta http-equiv="Expires" content="0"/>
        
<base target="_self"/>
        
<style type="text/css">
            body { border-right: 0px; padding-right: 0px; border-top: 0px; padding-left: 0px; background: #ffffff; padding-bottom: 0px; margin: 0px; overflow: hidden; border-left: 0px; width: 100%; padding-top: 0px; border-bottom: 0px }

            body 
{ font-size: 10pt; color: #000000; font-family: verdana, arial, helvetica, sans-serif }
            tr 
{ font-size: 10pt; color: #000000; font-family: verdana, arial, helvetica, sans-serif }
            td 
{ font-size: 10pt; color: #000000; font-family: verdana, arial, helvetica, sans-serif }
            div.imagespacer 
{ float: left; margin: 5px; font: 10pt verdana; overflow: hidden; width: 120px; height: 126px; text-align: center }
            div.imageholder 
{ border-right: #cccccc 1px solid; padding-right: 0px; border-top: #cccccc 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 0px; border-left: #cccccc 1px solid; width: 100px; padding-top: 0px; border-bottom: #cccccc 1px solid; height: 100px }
            div.titleholder 
{ font-size: 8pt; overflow: hidden; width: 100px; font-family: ms sans serif, arial; white-space: nowrap; text-overflow: ellipsis }
            .box 
{ border-right: #000000 1px solid; border-top: #000000 1px solid; border-left: #000000 1px solid; border-bottom: #000000 1px solid }

     </style>
    
</head>
    <script language="javascript" type="text/javascript">

        lastDiv 
= null;
        
function
 divClick(theDiv,filename) {
            
if
 (lastDiv) {
                lastDiv.style.border 
= "1 solid #CCCCCC"
;
            }
            lastDiv 
=
 theDiv;
            theDiv.style.border 
= "2 solid #316AC5"
;
            document.getElementById(
"FileToDelete").value =
 filename;
        }

        
function
 gotoFolder(rootfolder,newfolder) {
            window.navigate(
"ftb.imagegallery.aspx?frame=1&rif=" + rootfolder + "&cif=" +
 newfolder);
        }    
            
        
function
 returnImage(imagename,width,height) {
            
var arr = new
 Array();
            arr[
"filename"=
 imagename;  
            arr[
"width"=
 width;  
            arr[
"height"=
 height;             
            window.parent.returnValue 
=
 arr;
            window.parent.close();    
        }        
    
</script>

<body>
        
<form id="Form1" method="post" runat="server">
            
<table cellpadding="0" cellspacing="0" border="0" style="width: 100%; height: 100%;">
                
<tr>
                    
<td>
                        
<div id="galleryarea" style=" OVERFLOW:auto; width:100%; HEIGHT:100%">
                            
<asp:label id="gallerymessage" runat="server"></asp:label>
                            
<asp:panel id="GalleryPanel" runat="server"></asp:panel>
                        
</div>
                    
</td>
                
</tr>
                
<asp:Panel id="UploadPanel" runat="server">
                    
<tr>
                        
<td style="BORDER-TOP: #999999 1px solid; PADDING-LEFT: 10px; BACKGROUND-COLOR: whitesmoke" height="16">
                            
<table>
                                
<tr>
                                    
<td valign="top">点击浏览后选择图片,再点击上传你的自定义图像<BR>
                                            之后在列表中选择你的自定义图像
</td>
                                    
<td valign="top"></td>
                                    
<td style="width: 169px" valign="top"></td>
                                    
<td valign="middle"></td>
                                
</tr>
                                
<tr>
                                    
<td valign="top">
                                    
<input class="box" id="UploadFile" style="width: 312px; HEIGHT: 20px" type="file" size="32" name="UploadFile" runat="server"/></td>
                                    
<td valign="top">
                                        
<asp:Button id="btnUpload" runat="server" CssClass="box" Text="上传 " Width="32px" onclick="UploadImage_OnClick"></asp:Button></td>
                                    
<td style="width: 169px" valign="top">
                                        
<asp:button id="DeleteImage" runat="server" CssClass="box" Text="删除" onclick="DeleteImage_OnClick"></asp:button></td>
                                    
<td valign="middle" noWrap>
                                            
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="javascript:window.close()">关闭</asp:HyperLink></td>
                                
</tr>
                                
<tr>
                                    
<td style="width: 524px" colspan="3">
                                        
<asp:Label id="ResultsMessage" runat="server" ForeColor="OrangeRed"></asp:Label></td>
                                
</tr>
                            
</table>
                            
<input id="FileToDelete" type="hidden" name="FileToDelete" runat="server"/> 
                            
<input id="RootImagesFolder" type="hidden" value="images" name="RootImagesFolder" runat="server"/>

                            
<input id="CurrentImagesFolder" type="hidden" value="images" name="CurrentImagesFolder" runat="server" />
                        
</td>
                    
</tr>
                
</asp:Panel>
            
</table>
        
</form>
    
</body>
</html>


    

4、SelectImage.aspx.cs代码如下,注意private string DefaultImageFolder = "images//face";//图片存放路径

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class user_SelectImage : System.Web.UI.Page
{
    private string NoFileMessage = "未选中任何文件";
    private string UploadSuccessMessage = "上传成功";
    private string NoImagesMessage = "没有图像";
    private string NoFolderSpecifiedMessage = "没有文件夹";
    private string NoFileToDeleteMessage = "没有文件可删除";
    private string InvalidFileTypeMessage = "不合法的文件类型";
    private string BigImgmsg = "图片宽度或长度过大!";
    private string BigSizemsg = "图片大小过大!";
    private string[] AcceptedFileTypes = new string[] { "jpg", "jpeg", "jpe", "gif", "bmp", "png" };

    // Configuration
    private bool UploadIsEnabled = true;
    private bool DeleteIsEnabled = false;
    private string DefaultImageFolder = "images//face";//图片存放路径
    protected void Page_Load(object sender, System.EventArgs e)
    {
       // 在此处放置用户代码以初始化页面
        RootImagesFolder.Value = DefaultImageFolder;
        CurrentImagesFolder.Value = DefaultImageFolder;
        UploadPanel.Visible = UploadIsEnabled;
        DeleteImage.Visible = DeleteIsEnabled;

        if (!IsPostBack)
        {
            DisplayImages();
        }
    }

    protected void UploadImage_OnClick(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            if (CurrentImagesFolder.Value != "")
            {
                if (UploadFile.PostedFile.FileName.Trim() != "")
                {
                    if (IsValidFileType(UploadFile.PostedFile.FileName))
                    {
                        if (this.isBigWidthorHeight(UploadFile.PostedFile.InputStream))
                        {
                            if (IsBigSize(UploadFile.PostedFile.ContentLength))
                            {
                                try
                                {
                                    string UploadFileName = "";
                                    string UploadFileDestination = "";
                                    UploadFileName = UploadFile.PostedFile.FileName;
                                    UploadFileName = UploadFileName.Substring(UploadFileName.LastIndexOf("//") + 1);
                                    UploadFileDestination = HttpContext.Current.Request.PhysicalApplicationPath;
                                    UploadFileDestination += CurrentImagesFolder.Value;
                                    UploadFileDestination += "//";
                                    UploadFile.PostedFile.SaveAs(UploadFileDestination + UploadFileName);
                                    ResultsMessage.Text = UploadSuccessMessage;
                                }
                                catch
                                {
                                    ResultsMessage.Text = "未能成功上传,有错误发生";
                                }
                            }
                            else
                            {
                                ResultsMessage.Text = this.BigSizemsg;
                            }
                        }
                        else
                        {
                            ResultsMessage.Text = this.BigImgmsg;
                        }
                    }
                    else
                    {
                        ResultsMessage.Text = InvalidFileTypeMessage;
                    }
                }
                else
                {
                    ResultsMessage.Text = NoFileMessage;
                }
            }
            else
            {
                ResultsMessage.Text = NoFolderSpecifiedMessage;
            }
        }
        else
        {
            ResultsMessage.Text = InvalidFileTypeMessage;

        }
        DisplayImages();
    }

    /// <summary>
    /// 图片是否过高或过宽
    /// </summary>
    /// <param name="FileName"></param>
    /// <returns></returns>
    private bool isBigWidthorHeight(System.IO.Stream Fs)
    {
        //判断上传图片的大小,过大的话,不让上传
        System.Drawing.Image myImage = System.Drawing.Image.FromStream(Fs);
        if (myImage.Width > 130 || myImage.Height > 130)
            return false;
        else
            return true;
    }

    /// <summary>
    /// 图片是否过大
    /// </summary>
    /// <param name="imgSize"></param>
    /// <returns></returns>
    private bool IsBigSize(int imgSize)
    {
        if (imgSize > 20 * 1024)
            return false;
        else
            return true;
    }

    /// <summary>
    /// 删除图像
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void DeleteImage_OnClick(object sender, EventArgs e)
    {
        if (FileToDelete.Value != "" && FileToDelete.Value != "undefined")
        {
            try
            {
                string AppPath = HttpContext.Current.Request.PhysicalApplicationPath;
                System.IO.File.Delete(AppPath + CurrentImagesFolder.Value + "//" + FileToDelete.Value);
                ResultsMessage.Text = "已经删除: " + FileToDelete.Value;
            }
            catch
            {
                ResultsMessage.Text = "未能成功删除,有错误发生.";
            }
        }
        else
        {
            ResultsMessage.Text = NoFileToDeleteMessage;
        }
        DisplayImages();
    }

    private bool IsValidFileType(string FileName)
    {
        string ext = FileName.Substring(FileName.LastIndexOf(".") + 1, FileName.Length - FileName.LastIndexOf(".") - 1);
        for (int i = 0; i < AcceptedFileTypes.Length; i++)
        {
            if (ext.ToLower() == AcceptedFileTypes[i])
            {
                return true;

            }
        }
        return false;
    }


    private string[] ReturnFilesArray()
    {
        if (CurrentImagesFolder.Value != "")
        {
            try
            {
                string AppPath = HttpContext.Current.Request.PhysicalApplicationPath;
                string ImageFolderPath = AppPath + CurrentImagesFolder.Value;
                string[] FilesArray = System.IO.Directory.GetFiles(ImageFolderPath, "*");
                return FilesArray;
            }
            catch
            {

                return null;
            }
        }
        else
        {
            return null;
        }

    }

    private string[] ReturnDirectoriesArray()
    {
        if (CurrentImagesFolder.Value != "")
        {
            try
            {
                string AppPath = HttpContext.Current.Request.PhysicalApplicationPath;
                string CurrentFolderPath = AppPath + CurrentImagesFolder.Value;
                string[] DirectoriesArray = System.IO.Directory.GetDirectories(CurrentFolderPath, "*");
                return DirectoriesArray;
            }
            catch
            {
                return null;
            }
        }
        else
        {
            return null;
        }
    }


    public void DisplayImages()
    {
        string[] FilesArray = ReturnFilesArray();
        string[] DirectoriesArray = ReturnDirectoriesArray();
        string AppPath = HttpContext.Current.Request.PhysicalApplicationPath;
        string AppUrl;

        //Get the application's URL
        if (Request.ApplicationPath == "/")
            AppUrl = Request.ApplicationPath;
        else
            AppUrl = Request.ApplicationPath + "/";

        GalleryPanel.Controls.Clear();
        if ((FilesArray == null || FilesArray.Length == 0) && (DirectoriesArray == null || DirectoriesArray.Length == 0))
        {
            gallerymessage.Text = NoImagesMessage + ": " + RootImagesFolder.Value;
        }
        else
        {
            string ImageFileName = "";
            string ImageFileLocation = "";

            int thumbWidth = 94;
            int thumbHeight = 94;

            if (CurrentImagesFolder.Value != RootImagesFolder.Value)
            {

                System.Web.UI.HtmlControls.HtmlImage myHtmlImage = new System.Web.UI.HtmlControls.HtmlImage();
                myHtmlImage.Src = AppUrl + "images/ftb/folder.up.gif";
                myHtmlImage.Attributes["unselectable"] = "on";
                myHtmlImage.Attributes["align"] = "absmiddle";
                myHtmlImage.Attributes["vspace"] = "36";

                string ParentFolder = CurrentImagesFolder.Value.Substring(0, CurrentImagesFolder.Value.LastIndexOf("//"));

                System.Web.UI.WebControls.Panel myImageHolder = new System.Web.UI.WebControls.Panel();
                myImageHolder.CssClass = "imageholder";
                myImageHolder.Attributes["unselectable"] = "on";
                myImageHolder.Attributes["onclick"] = "divClick(this,'');";
                myImageHolder.Attributes["ondblclick"] = "gotoFolder('" + RootImagesFolder.Value + "','" + ParentFolder.Replace("//", "") + "');";
                myImageHolder.Controls.Add(myHtmlImage);

                System.Web.UI.WebControls.Panel myMainHolder = new System.Web.UI.WebControls.Panel();
                myMainHolder.CssClass = "imagespacer";
                myMainHolder.Controls.Add(myImageHolder);

                System.Web.UI.WebControls.Panel myTitleHolder = new System.Web.UI.WebControls.Panel();
                myTitleHolder.CssClass = "titleHolder";
                myTitleHolder.Controls.Add(new LiteralControl("Up"));
                myMainHolder.Controls.Add(myTitleHolder);

                GalleryPanel.Controls.Add(myMainHolder);

            }

            foreach (string _Directory in DirectoriesArray)
            {

                try
                {
                    string DirectoryName = _Directory.ToString();


                    System.Web.UI.HtmlControls.HtmlImage myHtmlImage = new System.Web.UI.HtmlControls.HtmlImage();
                    myHtmlImage.Src = AppUrl + "images/ftb/folder.big.gif";
                    myHtmlImage.Attributes["unselectable"] = "on";
                    myHtmlImage.Attributes["align"] = "absmiddle";
                    myHtmlImage.Attributes["vspace"] = "29";

                    System.Web.UI.WebControls.Panel myImageHolder = new System.Web.UI.WebControls.Panel();
                    myImageHolder.CssClass = "imageholder";
                    myImageHolder.Attributes["unselectable"] = "on";
                    myImageHolder.Attributes["onclick"] = "divClick(this);";
                    myImageHolder.Attributes["ondblclick"] = "gotoFolder('" + RootImagesFolder.Value + "','" + DirectoryName.Replace(AppPath, "").Replace("//", "") + "');";
                    myImageHolder.Controls.Add(myHtmlImage);

                    System.Web.UI.WebControls.Panel myMainHolder = new System.Web.UI.WebControls.Panel();
                    myMainHolder.CssClass = "imagespacer";
                    myMainHolder.Controls.Add(myImageHolder);

                    System.Web.UI.WebControls.Panel myTitleHolder = new System.Web.UI.WebControls.Panel();
                    myTitleHolder.CssClass = "titleHolder";
                    myTitleHolder.Controls.Add(new LiteralControl(DirectoryName.Replace(AppPath + CurrentImagesFolder.Value + "//", "")));
                    myMainHolder.Controls.Add(myTitleHolder);

                    GalleryPanel.Controls.Add(myMainHolder);
                }
                catch
                {
                    // nothing for error
                }
            }

            foreach (string ImageFile in FilesArray)
            {

                try
                {

                    ImageFileName = ImageFile.ToString();
                    ImageFileName = ImageFileName.Substring(ImageFileName.LastIndexOf("//") + 1);
                    ImageFileLocation = AppUrl;
                    ImageFileLocation = ImageFileLocation.Substring(ImageFileLocation.LastIndexOf("//") + 1);
                    //galleryfilelocation += "/";
                    ImageFileLocation += CurrentImagesFolder.Value;
                    ImageFileLocation += "/";
                    ImageFileLocation += ImageFileName;
                    System.Web.UI.HtmlControls.HtmlImage myHtmlImage = new System.Web.UI.HtmlControls.HtmlImage();
                    myHtmlImage.Src = ImageFileLocation;
                    System.Drawing.Image myImage = System.Drawing.Image.FromFile(ImageFile.ToString());
                    myHtmlImage.Attributes["unselectable"] = "on";
                    //myHtmlImage.border=0;

                    // landscape image
                    if (myImage.Width > myImage.Height)
                    {
                        if (myImage.Width > thumbWidth)
                        {
                            myHtmlImage.Width = thumbWidth;
                            myHtmlImage.Height = Convert.ToInt32(myImage.Height * thumbWidth / myImage.Width);
                        }
                        else
                        {
                            myHtmlImage.Width = myImage.Width;
                            myHtmlImage.Height = myImage.Height;
                        }
                        // portrait image
                    }
                    else
                    {
                        if (myImage.Height > thumbHeight)
                        {
                            myHtmlImage.Height = thumbHeight;
                            myHtmlImage.Width = Convert.ToInt32(myImage.Width * thumbHeight / myImage.Height);
                        }
                        else
                        {
                            myHtmlImage.Width = myImage.Width;
                            myHtmlImage.Height = myImage.Height;
                        }
                    }

                    if (myHtmlImage.Height < thumbHeight)
                    {
                        myHtmlImage.Attributes["vspace"] = Convert.ToInt32((thumbHeight / 2) - (myHtmlImage.Height / 2)).ToString();
                    }


                    System.Web.UI.WebControls.Panel myImageHolder = new System.Web.UI.WebControls.Panel();
                    myImageHolder.CssClass = "imageholder";
                    myImageHolder.Attributes["onclick"] = "divClick(this,'" + ImageFileName + "');";
                    myImageHolder.Attributes["ondblclick"] = "returnImage('" + ImageFileLocation.Replace("//", "/") + "','" + myImage.Width.ToString() + "','" + myImage.Height.ToString() + "');";
                    myImageHolder.Controls.Add(myHtmlImage);


                    System.Web.UI.WebControls.Panel myMainHolder = new System.Web.UI.WebControls.Panel();
                    myMainHolder.CssClass = "imagespacer";
                    myMainHolder.Controls.Add(myImageHolder);

                    System.Web.UI.WebControls.Panel myTitleHolder = new System.Web.UI.WebControls.Panel();
                    myTitleHolder.CssClass = "titleHolder";
                    myTitleHolder.Controls.Add(new LiteralControl(ImageFileName + "<BR>" + myImage.Width.ToString() + "x" + myImage.Height.ToString()));
                    myMainHolder.Controls.Add(myTitleHolder);

                    //GalleryPanel.Controls.Add(myImage);
                    GalleryPanel.Controls.Add(myMainHolder);

                    myImage.Dispose();
                }
                catch
                {

                }
            }
            gallerymessage.Text = "";
        }
    }
}


5、Default.aspx代码如下,注意document.getElementById("imgFace")是获得页面中的图片,控件ImgFace用来显示选择的结果,document.getElementById("hideImgFace").value用来存放选择图片的路径

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

<! 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 >
< script language = " javascript "   type = " text/javascript " >
    
function  InsertImageFromGallery() 
    {
        imgArr 
=  showModalDialog( ' SelectImage.aspx ' ,window, ' dialogWidth:460px; dialogHeight:360px;help:1;status:1;resizeable:0; ' );

        
if  (imgArr  !=   null
        {
            imagestring 
=   ' <IMG SRC= '   +  imgArr[ ' filename ' +   '  HEIGHT= '   +  imgArr[ ' height ' +   '  WIDTH= '   +  imgArr[ ' width ' +   '  BORDER=0> ' ;
            document.getElementById(
" imgFace " ).src = imgArr[ ' filename ' ];
            document.getElementById(
" imgFace " ).HEIGHT = imgArr[ ' height ' ];
            document.getElementById(
" imgFace " ).WIDTH = imgArr[ ' width ' ];
            document.getElementById(
" hideImgFace " ).value = imgArr[ ' filename ' ];
        } 
    }
</ script >

< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
        
< asp:Image  ID ="imgFace"  runat ="server"  ImageUrl ="~/images/face/8.gif"   />         
        
< asp:HyperLink  ID ="HyperLink1"  runat ="server"  NavigateUrl ="javascript:InsertImageFromGallery()" > 选择头像 </ asp:HyperLink >
        
< br  />
        
< asp:Button  ID ="Button1"  runat ="server"  Text ="Button"  OnClick ="Button1_Click"   />
        
< br  />
        
< asp:Label  ID ="Label1"  runat ="server" ></ asp:Label > &nbsp; < br  />
        
< br  />
        
< asp:HiddenField  ID ="hideImgFace"  runat ="server"   />
    
    
</ div >
    
</ form >
</ body >
</ html >


6、Default.aspx.cs代码如下,测试获得的图片路径,以方便在不同场合用,注意hideImgFace.Value.Replace("/TestImgSelect","..");中TestImgSelect是自己的网站名称

using System;
using
 System.Data;
using
 System.Configuration;
using
 System.Web;
using
 System.Web.Security;
using
 System.Web.UI;
using
 System.Web.UI.WebControls;
using
 System.Web.UI.WebControls.WebParts;
using
 System.Web.UI.HtmlControls;

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

    }
    
protected void Button1_Click(object
 sender, EventArgs e)
    {
        Label1.Text 
= "图片路径:"+hideImgFace.Value+"<br>相对路径:"+hideImgFace.Value.Replace("/TestImgSelect",".."
);
    }
}

7:运行效果如下,点选择头像,会弹出一个选择图片的窗口,双击图片则头像自动更改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值