VS2010下ASP.NET Web应用无需点击按钮实现上传图片预览及缩放
问题描述
现有一段基于Visual Studio 2010开发的ASP.NET Web应用代码,功能是点击Button1按钮后,将上传的图片缩放并显示在ASP Image控件中。需求是无需点击Button1按钮,直接在上传后自动完成缩放并显示图片,且应用不支持JavaScript代码。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Configuration; using System.Data.SqlClient; using System.Data; using System.IO; using System.Drawing; namespace imageResize1 { public partial class _Default : System.Web.UI.Page { string Strcon = ConfigurationManager.ConnectionStrings["con"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { ProcessedImage(); } private void ProcessedImage() { try { if (FileUpload1.HasFile) { int length = 192; int width = 192; using (Bitmap sourceImage = new Bitmap(FileUpload1.PostedFile.InputStream)) { using (Bitmap resizedImage = new Bitmap(length, width)) { using (Graphics graphics = Graphics.FromImage(resizedImage)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.DrawImage(sourceImage, 0, 0, length, width); } string resizedImagePath = Server.MapPath("~/Images/finalImage.png"); resizedImage.Save(resizedImagePath, ImageFormat.Png); ImgPhoto.ImageUrl = "~/Images/finalImage.png"; } } } } catch (Exception ex) { string errorMessage = "An error occurred " + ex.Message; } } } }
实现方案
可以通过调整页面回发逻辑,实现文件上传后自动处理并显示图片,无需手动点击按钮,具体步骤如下:
设置FileUpload自动回发
在ASPX页面的FileUpload控件中添加AutoPostBack="true"属性,这样用户选择文件后,页面会自动触发回发。修改Page_Load方法触发处理逻辑
调整后台代码的Page_Load方法,判断是否为回发请求且FileUpload已有上传文件,直接调用图片处理方法:protected void Page_Load(object sender, EventArgs e) { // 仅在回发且有上传文件时执行处理逻辑,避免首次加载触发 if (IsPostBack && FileUpload1.HasFile) { ProcessedImage(); } }移除Button1依赖
此时Button1已不再需要,可直接从ASPX页面中移除该控件,保留也不会影响自动处理逻辑。
注意事项
- 确保项目中
~/Images目录存在且具备读写权限,否则图片保存会失败。 - 当前代码会覆盖
finalImage.png,多用户场景下建议给生成的图片添加唯一标识(如GUID),避免互相覆盖。 - 异常处理可优化,比如将错误信息显示在页面的Label控件中,方便用户查看问题原因。
内容的提问来源于stack exchange,提问作者KARTHIK LAGVANKAR
相关产品推荐
相关产品推荐

