教学思路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`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
189 8
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
187 5
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
259 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
247 4
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
794 1
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
199 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
439 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
231 7