教学思路ASP.Net之服务器控件: 四、FileUpload

简介:
在ASP.Net中如果想打开一个文件实现保存的效果,不能像Winform中使用openFileDialog控件,可以限制打开文件的类型,是否上传也必须通过另外一个控件的一个事件才能激发,如下Button2_Click.
winform中openFileDialog的使用方法如下,但是可参考性很少
openFileDialog1.Filter = "图片类型(*.jpg)|*.jpg";//限制打开文件的类型
            if (openFileDialog1.ShowDialog() == DialogResult.OK)  //根据对话框的选择结果判断是否上传
            {
                imageList1.Images.Add(Image.FromFile(openFileDialog1.FileName));//上传选中的文件
            }
下面就让我们来学习一下FileUpLoad控件
 1  //上传图片 
 2          //TextBox2为上传图片的自定义文件名. 
 3          protected  void Button2_Click( object sender, EventArgs e) 
 4         { 
 5                  if (FileUpload1.HasFile) //判读是否有文件 
 6                 { 
 7                          string filename = FileUpload1.FileName; //得到文件在本地的路径,及全路径 
 8                          string kzm = filename.Substring(filename.LastIndexOf ( ".")); //将扩展名存放到变量kzm中 
 9                          string uploadfilename = Server.MapPath( "upload") +"\\"+TextBox2.Text+kzm; //得到文件在服务器上的路径和文件名和扩展名。 
10                          if (!kzm.Equals( ".jpg")&& kzm !=  ".JPG"//判断扩展名 
11                                 Response.Write( "<script>alert('格式不正确');</script>"); 
12                          if (File.Exists(uploadfilename))                  //判断重名 
13                                 Response.Write( "<script>alert('图片重名,请更换图片名称!');</script>"); 
14                          else 
15                         { 
16                                  try 
17                                 { 
18                                         FileUpload1.SaveAs(uploadfilename); //将文件上传到服务器上。 
19                                         Image1.ImageUrl = "upload\\" + TextBox2.Text + kzm; //图片路径为刚才上传的文件 
20                                         Image1.Height = 300; //控制图片的大小 
21                                         Image1.Width =250; 
22                                 } 
23                                  catch(Exception ex) 
24                                 { 
25                                            Response .Write ( "<script>alert('"+ex.Message.ToString ()+ "');</script>"); 
26                                 } 
27                         } 
28                 } 
29                  else 
30                 { 
31                         Response.Write( "<script>alert('你还没选择上传的图片!');</script>"); 
32             
33                 } 
34         }
下面的代码为在客户端书写对于上传控件文本格式的验证方法:
< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="Upload.aspx.cs"  Inherits ="Upload" % > 

< !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 >Asp.net文件上传时的客户端简单验证 </title> 
         
< script  language ="javascript"  > 
function checkmes(id) 

     var filename = document.getElementById(id).value; 
     //验证是否选择文件 
     if(filename=="") 
     { 
         alert("请选择一个文件!"); 
         return false; 
     } 
        
     //验证扩展名 
     var ex = filename.substring(filename.length-4); 
     if(ex!=".xls") 
     { 
            alert("你选择的文件类型不正确,请选择一个Excel文件!"); 
            return false; 
     } 
        
     //最后提示信息 
     return confirm("你确定要上传此Excel文件?"); 

</script> 

</head> 
< body > 
         < form  id ="form1"  runat ="server" > 
         < div > 
                 < strong >Asp.net文件上传时的客户端简单验证 < br  /> 
                         < br  /> 
                         < asp:FileUpload  ID ="fu_Excel"  runat ="server"  Width ="300px"  />  
                         < asp:Button  ID ="btn_Upload"  runat ="server"  Text ="上 传"  OnClick ="btn_Upload_Click"  />  </strong> </div> 
         </form> 
</body> 
</html>
在CS文件进行调用验证脚本的方法如下:
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 Upload : System.Web.UI.Page 

         protected  void Page_Load( object sender, EventArgs e) 
     { 
                btn_Upload.Attributes.Add( "onclick""javascript:return checkmes('" + fu_Excel.ClientID +  "');"); 
        } 
 
         protected  void btn_Upload_Click( object sender, EventArgs e) 
    { 
                 //上传文件的服务器端代码 
        } 
}
对于上传文件的验证方式还可以采用ASP.Net中的验证控件,如下便是对于照片格式的验证方式。
< asp:FileUpload  ID ="FileUpload1"  runat ="server"  /> 
                                                                  < asp:RegularExpressionValidator        
id ="FileUpLoadValidator"  runat ="server"        
ErrorMessage ="上传图片只能为.jpg或.gif"        
ValidationExpression ="^([a-zA-Z]:\\)[0-9a-zA-Z\u4e00-\u9fa5\w\s\\!@#\$%^&\*\(\)_\+\-=\[\]{};'\,\.]*(.jpg|.JPG|.gif|.GIF|.bmp|.BMP)$"        

ControlToValidate ="FileUpload1" > </ asp:RegularExpressionValidator >
如果想改变上传文件的大小限制,要在config文件中,在  <system.web/> 节点内加入如下节点及其属性
 <httpRuntime executionTimeout ="90" maxRequestLength="4096"/>  
批量上传:
 1protected  void Button3_Click( object sender, EventArgs e) 
 2        { 
 3                HttpFileCollection fileuploadControls = Request.Files; 
 4                 for ( int i = 0; i < fileuploadControls.Count; i++) 
 5                { 
 6                        HttpPostedFile fileuploadcontrol = fileuploadControls[i]; 
 7                         if (fileuploadControls[i].ContentLength > 0) 
 8                        { 
 9                                 try 
10                                { 
11                                        fileuploadcontrol.SaveAs(Server.MapPath( "upload") +"\\"+Path.GetFileName( fileuploadControls[i].FileName)); 
12                                } 
13                                 catch (Exception ex) 
14                                { 
15                                        Response.Write( "<script>alert('" + ex.Message.ToString() +  "');</script>"); 
16                                } 
17                        } 
18                } 
19                Response.Write( "<script>alert('上传成功!');</script>"); 
20        }
本文转自叶子文文博客51CTO博客,原文链接http://blog.51cto.com/leafwf/185694如需转载请自行联系原作者

叶子文文
相关文章
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
269 8
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
245 5
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
633 0
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
445 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
开发者 Windows
.NET 开源扁平化、美观的 C/S 控件库
【10月更文挑战第23天】介绍了三款适用于 .NET 平台的开源扁平化、美观的 C/S 控件库:MaterialSkin 采用 Google Material Design 风格,适合现代感界面;Krypton Toolkit 提供丰富控件,界面易于定制;Fluent Ribbon Control Suite 模仿 Office 界面,适合复杂功能应用。每款控件库均附有示例代码及 GitHub 链接。
923 0
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
364 1
|
C# Android开发 iOS开发
一组.NET MAUI绘制的开源控件 - AlohaKit
一组.NET MAUI绘制的开源控件 - AlohaKit
377 0
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
286 0