ASP.NET里的上传图片处理(上)

技术   2007-06-15 09:01   阅读248   评论3  
字号:    

ASP.NET2.0打通文件图片处理任督二脉

作者:清清月儿

主页:http://blog.csdn.net/21aspnet/           时间:2007.4.1

1.最简单的单文件上传(没花头)

2.多文件上传

3.客户端检查上传文件类型(以上传图片为例)

4.服务器端检查上传文件类型(以上传图片为例)

5.服务器端检查上传文件类型(可以检测真正文件名)

6.上传文件文件名唯一性处理(时间戳+SessionID)

7.上传图片生成等比例缩略图

8.上传图片加水印(文字水印,图片水印,文字+图片水印)

-------------------------------------------------------------------

1.最简单的单文件上传(没花头)

效果图:

说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有html的上传控件,那时候要把html控件转化为服务器控件,很不好用。其实所有文件上传的美丽效果都是从这个FileUpload控件衍生,第一个例子虽然简单却是根本。

后台代码:

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 _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void bt_upload_Click(object sender, EventArgs e)

    {

        try

        {

            if (FileUpload1.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                string filepath = FileUpload1.PostedFile.FileName;

                string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                string serverpath = Server.MapPath("images/") + filename;

                FileUpload1.PostedFile.SaveAs(serverpath);

                this.lb_info.Text = "上传成功!";

            }

        }

        catch (Exception ex)

        {

            this.lb_info.Text = "上传发生错误!原因是:" + ex.ToString();

        }

    }

}

前台代码:

 <table style="width: 343px">

            <tr>

                <td style="width: 100px">

                    单文件上传</td>

                <td style="width: 100px">

                </td>

            </tr>

            <tr>

                <td style="width: 100px">

                    <asp:FileUpload runat="server" Width="475px" />

                    </td>

                <td style="width: 100px">

                    <asp:Button runat="server" Text="上传" /></td>

            </tr>

            <tr>

                <td style="width: 100px; height: 21px;">

                    <asp:Label runat="server" ForeColor="Red" Width="183px"></asp:Label></td>

                <td style="width: 100px; height: 21px">

                </td>

            </tr>

        </table>

2.多文件上传

效果图:

后台代码:

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 _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void bt_upload_Click(object sender, EventArgs e)

    {

       

            if ((FileUpload1.PostedFile.FileName == "" && FileUpload2.PostedFile.FileName == "")&&FileUpload3.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                HttpFileCollection myfiles = Request.Files;

                for (int i = 0; i < myfiles.Count; i++)

                {

                    HttpPostedFile mypost = myfiles[i];

                    try

                    {

                        if (mypost.ContentLength > 0)

                        {

                             string filepath = mypost.FileName;

                             string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                             string serverpath = Server.MapPath("images/") + filename;

                             mypost.SaveAs(serverpath);

                             this.lb_info.Text = "上传成功!";

                        }

                    }

                    catch (Exception error)

                    {

                        this.lb_info.Text = "上传发生错误!原因:" + error.ToString();

                    }

                }

              

            }

        }

      

    }

前台代码:

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>多文件上传 清清月儿http://blog.csdn.net/21aspnet/</title>

</head>

<body>

    <form runat="server">

    <div>

        <table style="width: 343px">

            <tr>

                <td style="width: 100px">

                    多文件上传</td>

                <td style="width: 100px">

                </td>

            </tr>

            <tr>

                <td style="width: 100px">

                    <asp:FileUpload runat="server" Width="475px" />

                    </td>

                <td style="width: 100px">

                    </td>

            </tr>

            <tr>

                <td style="width: 100px">

                    <asp:FileUpload runat="server" Width="475px" /></td>

                <td style="width: 100px">

                </td>

            </tr>

            <tr>

                <td style="width: 100px">

                    <asp:FileUpload runat="server" Width="475px" /></td>

                <td style="width: 100px">

                </td>

            </tr>

            <tr>

                <td style="width: 100px">

                    <asp:Button runat="server" Text="一起上传" />

                    <asp:Label runat="server" ForeColor="Red" Width="183px"></asp:Label></td>

                <td style="width: 100px">

                </td>

            </tr>

        </table>

   

    </div>

    </form>

</body>

</html>

3.客户端检查上传文件类型(以上传图片为例)

效果图:

后台代码和1.最简单的单文件上传一样;

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_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>

<script language="javascrip">

 function Check_FileType()

{

var str=document.getElementById("FileUpload1").value;

 var pos = str.lastIndexOf(".");

 var lastname = str.substring(pos,str.length) 

 if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")

 {

     alert("您上传的文件类型为"+lastname+",图片必须为.jpg,.gif类型");

     return false;

 }

 else

 {

  return true;

 }

}

 </script> 

</head>

<body>

    <form runat="server">

    <div>

        <table style="width: 343px">

            <tr>

                <td style="width: 104px">

                    文件上传判断</td>

                <td style="width: 100px">

                </td>

            </tr>

            <tr>

                <td style="width: 104px">

                    <asp:FileUpload runat="server" Width="400px" />

                    </td>

                <td style="width: 100px">

                    <asp:Button runat="server" Text="上传"  OnClientClick="return Check_FileType()"/></td>

            </tr>

            <tr>

                <td style="width: 104px; height: 21px;">

                    <asp:Label runat="server" ForeColor="Red" Width="183px"></asp:Label></td>

                <td style="width: 100px; height: 21px">

                </td>

            </tr>

        </table>

   

    </div>

    </form>

</body>

</html>

说明:点击上传时先触发客户端事件Check_FileType;

4.服务器端检查上传文件类型(以上传图片为例)

效果图:

后台代码:

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 _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void bt_upload_Click(object sender, EventArgs e)

    {

        try

        {

            if (FileUpload1.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                string filepath = FileUpload1.PostedFile.FileName;

                if (IsAllowedExtension(FileUpload1) == true)

                {

                    string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                    string serverpath = Server.MapPath("images/") + filename;

                    FileUpload1.PostedFile.SaveAs(serverpath);

                    this.lb_info.Text = "上传成功!";

                }

                else

                {

                    this.lb_info.Text = "请上传图片";

                }

            }

        }

        catch (Exception error)

        {

            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();

        }

    }

   public static bool IsAllowedExtension(FileUpload hifile)

    {

        string strOldFilePath = "", strExtension = "";

        string[] arrExtension =   { ".gif", ".jpg", ".jpeg", ".bmp", ".png" };

        if (hifile.PostedFile.FileName != string.Empty)

        {

            strOldFilePath = hifile.PostedFile.FileName;

            strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf("."));

            for (int i = 0; i < arrExtension.Length; i++)

            {

                if (strExtension.Equals(arrExtension[i]))

                {

                    return true;

                }

            }

        }

        return false;

    }  

}

 5.服务器端检查上传文件类型(可以检测真正文件名)

其实方法4并不好,因为用户可以把XXX.txt伪装为XXX.jpg。

效果图:

后台代码:

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 _Default : System.Web.UI.Page

{

    //清清月儿 http://blog.csdn.net/21aspnet

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void bt_upload_Click(object sender, EventArgs e)

    {

        try

        {

            if (FileUpload1.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                string filepath = FileUpload1.PostedFile.FileName;

                if (IsAllowedExtension(FileUpload1) == true)

                {

                    string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                    string serverpath = Server.MapPath("images/") + filename;

                    FileUpload1.PostedFile.SaveAs(serverpath);

                    this.lb_info.Text = "上传成功!";

                }

                else

                {

                    this.lb_info.Text = "请上传图片";

                }

            }

        }

        catch (Exception error)

        {

            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();

        }

    }

    public static bool IsAllowedExtension(FileUpload hifile)

    {

        System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);

        System.IO.BinaryReader r = new System.IO.BinaryReader(fs);

        string fileclass = "";

        byte buffer;

        try

        {

            buffer = r.ReadByte();

            fileclass = buffer.ToString();

            buffer = r.ReadByte();

            fileclass += buffer.ToString();

        }

        catch

        {

          

        }

        r.Close();

        fs.Close();

        if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar

        {

            return true;

        }

        else

        {

            return false;

        }

    }  

}

6.上传文件文件名唯一性处理(时间戳+SessionID)

效果图:

说明:年月日时分秒+临时session+原文件名 如果大家怕还会重复可以加GUID

后台代码:

try

        {

            if (FileUpload1.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                string filepath = FileUpload1.PostedFile.FileName;

                string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                string serverpath = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;

                FileUpload1.PostedFile.SaveAs(serverpath);

                this.lb_info.Text = "上传成功!";

            }

        }

        catch (Exception error)

        {

            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();

        }

注:GUID的方法:Guid myGuid=Guid.NewGuid();

7.上传图片生成等比例缩略图

效果图:

缩略图代码:

ImageThumbnail.cs

using System;

using System.IO;

using System.Drawing;

using System.Drawing.Imaging;

public class ImageThumbnail

{

    public Image ResourceImage;

    private int ImageWidth;

    private int ImageHeight;

    public string ErrorMessage;

    public ImageThumbnail(string ImageFileName)

    {

        ResourceImage = Image.FromFile(ImageFileName);

        ErrorMessage = "";

    }

    public bool ThumbnailCallback()

    {

        return false;

    }

    // 方法1,按大小

    public bool ReducedImage(int Width, int Height, string targetFilePath)

    {

        try

        {

            Image ReducedImage;

            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);

            ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);

            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);

            ReducedImage.Dispose();

            return true;

        }

        catch (Exception e)

        {

            ErrorMessage = e.Message;

            return false;

        }

    }

    // 方法2,按百分比  缩小60% Percent为0.6 targetFilePath为目标路径

    public bool ReducedImage(double Percent, string targetFilePath)

    {

        try

        {

            Image ReducedImage;

            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);

            ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);

            ImageHeight = (ResourceImage.Height)*ImageWidth/ ResourceImage.Width;//等比例缩放

            ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);

            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);

            ReducedImage.Dispose();

            return true;

        }

        catch (Exception e)

        {

            ErrorMessage = e.Message;

            return false;

        }

    }

}

后台代码:

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 _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    protected void bt_upload_Click(object sender, EventArgs e)

    {

        try

        {

            if (FileUpload1.PostedFile.FileName == "")

            {

                this.lb_info.Text = "请选择文件!";

            }

            else

            {

                string filepath = FileUpload1.PostedFile.FileName;

                string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);

                string serverpath1 = Server.MapPath("images/") + filename;

                string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;

                FileUpload1.PostedFile.SaveAs(serverpath1);

                ImageThumbnail img = new ImageThumbnail(filepath);

                img.ReducedImage(0.4, serverpath2);//0.4表示缩小40%

                this.lb_info.Text = "上传成功!";

            }

        }

        catch (Exception error)

        {

            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();

        }

    }

}

评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009