ASP.NET中PhotoUpload控件HasFile始终为false的解决方法
修复PhotoUpload.HasFile始终为false的问题
问题代码
if (PhotoUpload.HasFile) { int length = 192; int width = 192; using (Bitmap sourceImage = new Bitmap(PhotoUpload.PostedFile.InputStream)) { using (Bitmap resizedPhoto = new Bitmap(length, width)) { using (Graphics graphics = Graphics.FromImage(resizedPhoto)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.DrawImage(sourceImage, 0, 0, length, width); } string resizedImagePath = Server.MapPath("~/Picture/resizedPhoto.png"); resizedPhoto.Save(resizedImagePath, System.Drawing.Imaging.ImageFormat.Png); string fileName = Path.GetFileName(PhotoUpload.PostedFile.FileName); string filePath = Path.Combine(Server.MapPath("~/Picture/"), fileName); PhotoUpload.SaveAs(filePath); ImageDisplay.Visible = true; ImageDisplay.ImageUrl = "~/Picture/resizedPhoto.png"; } } }
问题描述
使用Visual Studio 2010开发ASP.NET网页,页面包含文件上传按钮,意图实现上传图片缩放后在ASP Image控件中显示的功能,但即使选择了图片,PhotoUpload控件的HasFile属性始终为false。
修复方案
检查表单enctype属性
页面的<form>标签必须添加enctype="multipart/form-data",这是服务器接收上传文件的必要条件,缺失该属性会导致文件无法被识别。示例:<form id="form1" runat="server" enctype="multipart/form-data">验证控件ID匹配
确认ASPX页面中FileUpload控件的ID确实为PhotoUpload,无拼写错误。页面控件代码示例:<asp:FileUpload ID="PhotoUpload" runat="server" />处理UpdatePanel回发问题
如果页面使用了UpdatePanel,必须为触发上传的按钮配置PostBackTrigger,因为UpdatePanel的局部回发无法处理文件上传。示例:<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:FileUpload ID="PhotoUpload" runat="server" /> <asp:Button ID="UploadBtn" runat="server" Text="上传" OnClick="UploadBtn_Click" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="UploadBtn" /> </Triggers> </asp:UpdatePanel>也可以直接移除UpdatePanel,使用整页回发处理上传。
检查文件大小限制
在Web.config中确认maxRequestLength设置,若上传文件超过该值,HasFile会返回false。示例:<system.web> <httpRuntime maxRequestLength="4096" /> <!-- 单位KB,此处限制为4MB --> </system.web>调试排查请求内容
在代码开头添加调试代码,查看服务器是否接收到文件:int fileCount = Request.Files.Count; Response.Write("接收到的文件数量:" + fileCount);如果
fileCount为0,说明文件未传到服务器,重点排查表单enctype和回发逻辑。
内容的提问来源于stack exchange,提问作者KARTHIK LAGVANKAR
相关产品推荐
相关产品推荐

