当前位置:首页 > 行业动态 > 正文

ASPNET图片上传实例,如何操作?

csharp,protected void UploadButton_Click(object sender, EventArgs e),{, if (FileUpload1.HasFile), {, try, {, string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);, FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Uploads/") + filename);, StatusLabel.Text = "Upload status: File uploaded!";, }, catch (Exception ex), {, StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;, }, },},

在ASP.NET中,图片上传是一个常见的功能需求,可以通过多种方式实现,以下是一些关于ASP.NET图片上传的详细实例和解释:

一、单一图片上传实例

1、前端代码(Default.aspx):

包含一个FileUpload控件用于选择文件,一个Button控件用于触发上传操作,以及一个Label控件用于显示上传结果信息,还有一个Image控件用于显示上传的图片。

代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>图片上传</title>
    </head>
    <body>
        <form id="form1" runat="server" enctype="multipart/form-data">
            <div>
                <asp:FileUpload ID="FileUpload1" runat="server" />
                <asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" />
                <br />
                <asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
                <br />
                <asp:Image ID="imgThumbnail" runat="server" Visible="false" />
            </div>
        </form>
    </body>
    </html>

2、后端代码(Default.aspx.cs):

在Page_Load事件中初始化页面,在btnUpload_Click事件中处理图片上传逻辑。

检查FileUpload控件中是否有文件,如果有则获取文件并检查其类型是否为图片格式。

将原始图片保存到服务器指定目录,然后生成缩略图并保存,最后更新Image控件的ImageUrl属性以显示缩略图。

代码如下:

    using System;
    using System.Drawing;
    using System.IO;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnUpload_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                try
                {
                    // 获取上传的文件
                    HttpPostedFile file = FileUpload1.PostedFile;
                    // 检查文件类型
                    if (file.ContentType.ToLower().StartsWith("image/"))
                    {
                        // 保存原始图片
                        string uploadPath = Server.MapPath("~/Uploads/");
                        if (!Directory.Exists(uploadPath))
                        {
                            Directory.CreateDirectory(uploadPath);
                        }
                        string fileName = Path.GetFileName(file.FileName);
                        string filePath = Path.Combine(uploadPath, fileName);
                        file.SaveAs(filePath);
                        // 生成缩略图
                        string thumbnailPath = Path.Combine(uploadPath, "thumbnail_" + fileName);
                        GenerateThumbnail(filePath, thumbnailPath, 100, 100);
                        // 显示缩略图
                        imgThumbnail.ImageUrl = "~/Uploads/thumbnail_" + fileName;
                        imgThumbnail.Visible = true;
                        lblMessage.Text = "图片上传成功,缩略图已生成。";
                    }
                    else
                    {
                        lblMessage.Text = "请上传有效的图片文件。";
                    }
                }
                catch (Exception ex)
                {
                    lblMessage.Text = "发生错误: " + ex.Message;
                }
            }
            else
            {
                lblMessage.Text = "请选择要上传的图片文件。";
            }
        }
        private void GenerateThumbnail(string originalImagePath, string thumbnailPath, int width, int height)
        {
            using (System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath))
            {
                using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, height, null, IntPtr.Zero))
                {
                    thumbnail.Save(thumbnailPath);
                }
            }
        }
    }

二、添加文字水印的图片上传实例

1、前端代码(Default.aspx):

与单一图片上传实例类似,但多了一个用于选择添加文字水印的选项或按钮(此处简化为直接在上传时添加水印)。

代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>添加文字水印的图片上传</title>
    </head>
    <body>
        <form id="form1" runat="server" enctype="multipart/form-data">
            <div>
                <asp:FileUpload ID="FileUpload2" runat="server" />
                <asp:Button ID="Button2" runat="server" Text="上传文字图片" OnClick="Button2_Click" />
                <br />
                <asp:Image ID="Image2" runat="server" Height="200px" Width="200px" />
            </div>
        </form>
    </body>
    </html>

2、后端代码(Default.aspx.cs):

在Button2_Click事件中处理图片上传逻辑,与单一图片上传类似,但在保存图片前使用Graphics类添加文字水印。

代码如下:

    using System;
    using System.Drawing;
    using System.IO;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            if (FileUpload2.HasFile)
            {
                try
                {
                    HttpPostedFile file = FileUpload2.PostedFile;
                    if (file.ContentLength > 0 && file.ContentType.Contains("image/"))
                    {
                        using (System.Drawing.Image img = System.Drawing.Image.FromStream(file.InputStream))
                        {
                            using (Graphics g = Graphics.FromImage(img))
                            {
                                g.DrawString("我的图片", new Font("宋体", 14), Brushes.Red, 0, 0);
                            }
                            string fileName = System.IO.Path.GetFileName(file.FileName);
                            string[] splitFileName = fileName.Split('.');
                            string atterFileName = DateTime.Now.ToString("yyyMMddHHmmss") + "." + splitFileName[1];
                            img.Save(Server.MapPath("/upload/" + atterFileName));
                            this.Image2.ImageUrl = "upload/" + atterFileName;
                        }
                    }
                    else
                    {
                        Response.Write("<script>alert('该文件不是图片格式!');</script>");
                    }
                }
                catch (Exception ex)
                {
                    Response.Write("<script>alert('发生错误: " + ex.Message + "');</script>");
                }
            }
            else
            {
                Response.Write("<script>alert('请选择要上传的图片');</script>");
            }
        }
    }

三、添加图片水印的图片上传实例(简化版)

1、前端代码(Default.aspx):

同样包含FileUpload控件、Button控件和Image控件。

代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>添加图片水印的图片上传</title>
    </head>
    <body>
        <form id="form1" runat="server" enctype="multipart/form-data">
            <div>
                <asp:FileUpload ID="FileUpload3" runat="server" />
                <asp:Button ID="Button3" runat="server" Text="上传水印图片" OnClick="Button3_Click" />
                <br />
                <asp:Image ID="Image3" runat="server" Height="200px" Width="200px" />
            </div>
        </form>
    </body>
    </html>

2、后端代码(Default.aspx.cs):

在Button3_Click事件中处理图片上传逻辑,与添加文字水印类似,但这里假设已经有一个准备好的图片水印(可以是另一个图片文件或内存中的Bitmap对象)。

代码如下(注意:此代码仅为示例,实际应用中需要根据具体情况调整水印图片的加载和绘制方式):

    using System;
    using System.Drawing;
    using System.IO;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            if (FileUpload3.HasFile)
            {
                try
                {
                    HttpPostedFile file = FileUpload3.PostedFile;
                    if (file.ContentLength > 0 && file.ContentType.Contains("image/"))
                    {
                        using (System.Drawing.Image img = System.Drawing.Image.FromStream(file.InputStream))
                        {
                            // 假设watermark是提前准备好的水印图片路径或Bitmap对象
                            System.Drawing.Image watermark = System.Drawing.Image.FromFile(@"C:pathtowatermark.png"); // 示例路径,需根据实际情况修改
                            using (Graphics g = Graphics.FromImage(img))
                            {
                                g.DrawImage(watermark, new Point(0, 0)); // 根据需要调整水印位置
                            }
                            string fileName = System.IO.Path.GetFileName(file.FileName);
                            string[] splitFileName = fileName.Split('.');
                            string atterFileName = DateTime.Now.ToString("yyyMMddHHmmss") + "." + splitFileName[1];
                            img.Save(Server.MapPath("/upload/" + atterFileName));
                            this.Image3.ImageUrl = "upload/" + atterFileName;
                        }
                    }
                    else
                    {
                        Response.Write("<script>alert('该文件不是图片格式!');</script>");
                    }
                }
                catch (Exception ex)
                {
                    Response.Write("<script>alert('发生错误: " + ex.Message + "');</script>");
                }
            }
            else
            {
                Response.Write("<script>alert('请选择要上传的图片');</script>");
            }
        }
    }

四、相关问答FAQs:

Q1:如何在ASP.NET中限制上传图片的大小?可以在上传前通过JavaScript进行初步验证,然后在服务器端再次验证,在前端可以使用onchange事件监听FileUpload控件的变化,并使用files[0].size属性获取文件大小进行判断,在服务器端,可以在接收到文件后使用HttpPostedFile对象的ContentLength属性获取文件大小,并进行相应的限制,如果超过限制,可以向用户返回错误信息,具体代码可以根据上述实例进行扩展和修改。

Q2:如何确保上传的图片安全?除了限制图片大小外,还可以对文件类型进行严格验证,只允许上传特定类型的图片文件(如JPEG、PNG等),对上传的文件名进行过滤和消毒处理,防止反面文件名导致的安全问题,还可以将上传的图片保存到非Web根目录下,避免被直接访问,对于生成的缩略图或其他处理后的图片,也应采取类似的安全措施。

0