ASPNET图片上传实例,如何操作?
- 行业动态
- 2025-03-08
- 2
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根目录下,避免被直接访问,对于生成的缩略图或其他处理后的图片,也应采取类似的安全措施。