Asp.net中关于上传文件的各项基本操作

简介:

在常见的B/S模式下企业级架构中上传文件是一个常见业务操作.在.NET 1.1版本是只有对应的客户端HTML版本的Input<Type="File">,在.NET2.0版本添加进来了服务器端的FileUpload控件.

其实考虑在设计这个控件时为了保证.NET安全机制.默认设置是文件上传的大小是2M. 当然可以通过修改系统的Web.Config配置文件达到4M. 其实相对而言Fileupload是一把双刃剑.使用时扬长避短是很重要的.

开发者应该了解的是,之所以默认的文件大小上限为4MB,并不是因为当时的设计人员灵光一现,而是为了避免潜在DOS攻击危险。若是攻击者提交了一个或多个大文件,往往会让服务器不堪重负。若是用户上传的文件大于4MB,将会得到“Maximum request length exceeded.”异常信息. 当然这些就涉及到Asp.net平台下大文件上传的问题作为下一节讨论并实现. 本章主要实现的是利用Asp.net中FileUpload控制的一些基本操作.

最近装上VS2010 Beta2版本. NET FrameWork 4.0.(关系不大)试用一下.以下的项目编码都在该环境下运行.

(A):简单文件上传操作 页面代码:

 
  1. --前台一个上传控件  接着是一个上传按钮  
  2.  <asp:FileUpload ID="FileUpload5" runat="server" Width="475px"></asp:FileUpload>  
  3.  <asp:Button ID="TestFileType" runat="server" Text="上传文件-判断文件类型"   
  4.             onclick="TestFileType_Click" OnClientClick="CheckFileType()" ></asp:Button> 

后台Button时间操作代码:

 
  1. //向服务器上传文件-BasicOperatorDemo(基本操作演示) -最简单操作  
  2.    //Author:chenkai Date:2009年11月10日14:22:36  
  3.         protected void bt_upload_Click(object sender, EventArgs e)  
  4.         {  
  5.             try {  
  6.                 if (FileUpload1.PostedFile.FileName == "")  
  7.                 {  
  8.                     this.lb_info.Text = "请选择您要上传的文件!";  
  9.                 }  
  10.                 else 
  11.                 {  
  12.                     string filepath = FileUpload1.PostedFile.FileName.ToString();  
  13.                     string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);  
  14.  
  15.                     string serverpath = HttpContext.Current.Server.MapPath("Images/") + filename;  
  16.                        
  17.                     //保存到服务器上   判断文件目录是否存在  
  18.                     if (File.Exists(serverpath))  
  19.                     {  
  20.                         FileUpload1.SaveAs(serverpath);  
  21.                         this.lb_info.Text = "文件上传成功!";  
  22.                     }  
  23.                     else 
  24.                     {  
  25.                         //创建保存目录  
  26.                         File.Create(serverpath);  
  27.                     }  
  28.                         
  29.                 }  
  30.             }  
  31.             catch (Exception se)  
  32.             {  
  33.                 this.lb_info.Text = "上传过程发生错误!错误原因:" + se.ToString();  
  34.             }  
  35.         } 

再次逐步的提高要求: A:限制客户端上传文件的文件类型. 只能上传制定的.JPG/.Jpeg/.chm 3种类型的文件. 客户端验证模式:

 
  1. <Script language="JavaScript" Type="JS/Text">  
  2.         //定义一个客户端JS函数来判断上传文件的类型 在Button onClintClick事件调用  
  3.         function CheckFileType() {  
  4.             //尽然可以直接调用服务器端控件  
  5.             var str = document.getElementById("FileUpload5").value;  
  6.             alert(str);  
  7.          var pos = str.lastIndexOf(".");  
  8.          var lastname = str.substring(pos,str.length)    
  9.    
  10.         if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")  
  11.          {  
  12.              alert("您上传的文件类型为"+lastname+",图片必须为.jpg,.gif类型");  
  13.              return false;  
  14.          }  
  15.        else   
  16.         {  
  17.              return true;  
  18.         }  
  19.         }  
  20.     </Script> 

上传制定文件类型服务器端验证模式:

 
  1. /// <summary>  
  2.         /// 检测真正的上传文件类型数据  
  3.         /// Author:chenkai  Date:2009年11月11日10:44:26  
  4.         /// </summary>  
  5.         public bool CheckClintFileType(FileUpload getfile)  
  6.         {  
  7.             //获得数据  
  8.             System.IO.FileStream getstream=new FileStream(getfile.FileName,FileMode.Open,FileAccess.Read);  
  9.             System.IO.BinaryReader getreader = new BinaryReader(getstream);  
  10.  
  11.             string fileclass = string.Empty;  
  12.             byte buffer;  
  13.  
  14.             try  
  15.             {  
  16.                 //读取的文件流转化成二进制文件  
  17.                 buffer = getreader.ReadByte();  
  18.                 fileclass = buffer.ToString();  
  19.                 //再次叠加 

 


本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/765300


相关文章
|
6月前
|
JSON C# 数据格式
.net core 上传文件到本地服务器
## 1、本文是上传文件到本地服务器,主要以作者做的业务上传apk为例子,下面直接上代码 ```csharp [HttpGet, HttpPost, HttpOptions] [Consumes("application/json", "multipart/form-data")] public IActionResult UploadFileToServer([FromForm] IFormCollection file) { try { IFormFile item = null; if(file.IsNull() || file.Count
60 0
|
前端开发
.NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
.NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
372 0
.NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
|
C# 开发工具
NET CORE 七牛云上传文件
NET CORE 七牛云上传文件 文档:https://developer.qiniu.com/kodo/sdk/1237/csharp
498 0
 NET CORE 七牛云上传文件
|
.NET 开发框架 数据安全/隐私保护
|
.NET 开发框架
Asp.net上传文件Request.files获取不到文件
使用ftp上传文件,并且Request.files获取文件,今天发现获取到的文件个数始终是0个,查了下原来form标签中需加入enctype=”multipart/form-data”,呵呵       大家注意,除了上述外,控件必须有name属性,不然后台也是获取不到的,郁闷吧 博客链接地址:http://blog.
1657 0
.NET FileUpLoad上传文件
  一.上传扫描件到服务器,自定义创建文件夹(如果存在该文件夹,则无需创建),并判断格式以及文件大小进行保存: 首先创建一个保存按钮事件:      protected void btnSave_Click(object sender, EventArgs e) { ...
1071 0
|
.NET 开发框架 C#
asp.net上传文件
1 使用标准HTML来进行图片上传 前台代码:                                                                       使用标准HTML来进行图片上传                                      ...
764 0