• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > asp.net(C#)中上传大文件的几中常见应用方法

asp.net(C#)中上传大文件的几中常见应用方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了c asp.net实例,c asp.net教程,c asp.net 入门,c asp.net视频教程,c asp.net 控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
几种常见的方法,本文主要内容包括:
  
  第一部分:首先我们来说一下如何解决ASP.net中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改Web.Config文件来自定义最大文件大小,如下:

  这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大 MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理。解决的方法是利用隐含的 HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET 建立的pipe里分块读取数据。实现方法如下:

IServiceProvidERProvider=(IServiceProvider)HttpContext.Current; 
HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); 
byte[]bs=wr.GetPreloadedEntityBody(); 
if(!wr.IsEntireEntityBodyIsPreloaded()) 
{ 
 intn=1024; 
 byte[]bs2=newbyte[n]; 
 while(wr.ReadEntityBody(bs2,n)>0) 
 { 
  .. 
 } 
}   
这样就可以解决了大文件的上传问题了。

  第二部分:下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息。

  首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。

public class FileUpLoad 
{ 
 public FileUpLoad() 
 {} 
 /// 上传文件名称 
 public string FileName 
 { 
  get 
  { 
   return fileName; 
  } 
  set 
  { 
   fileName = value; 
  } 
 } 
 private string fileName;
 /// 上传文件路径 
 public string FilePath 
 { 
  get 
  { 
   return filepath; 
  } 
  set 
  { 
   filepath = value; 
  } 
 } 
 private string filepath;

 /// 文件扩展名 
 public string FileExtension 
 { 
  get 
  { 
   return fileExtension; 
  } 
  set 
  { 
   fileExtension = value; 
  } 
 } 
 private string fileExtension; 
}   

另外我们还可以在配置文件中限制上传文件的格式(App.Config):
<?XML version="1.0" encoding="gb2312" ?> 
<Application> 
<FileUpLoad>
<Format>.jpg|.gif|.png|.bmp 
</FileUpLoad> 
</Application>  这样我们就可以开始写我们的上传文件的方法了,如下: public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom) 
{ 
 FileUpLoad fp = new FileUpLoad(); 
 string fileName,fileExtension; 
 string saveName;
 //建立上传对象 
 HttpPostedFile postedFile = InputFile.PostedFile;

 fileName = System.IO.Path.GetFileName(postedFile.FileName); 
 fileExtension = System.IO.Path.GetExtension(fileName);
 //根据类型确定文件格式 
 AppConfig app = new AppConfig(); 
 string format = app.GetPath("FileUpLoad/Format");
 //如果格式都不符合则返回 
 if(format.IndexOf(fileExtension)==-1) 
 { 
  throw new ApplicationException("上传数据格式不合法"); 
 }

 // 
 //根据日期和随机数生成随机的文件名 
 // 
 if(myfileName != string.Empty) 
 { 
  fileName = myfileName; 
 }

 if(isRandom) 
 { 
  Random objRand = new Random(); 
  System.DateTime date = DateTime.Now; 
  //生成随机文件名 
  saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString() + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100); 
  fileName = saveName + fileExtension; 
 }

 string phyPath = HttpContext.Current.Request.MapPath(filePath);

 //判断路径是否存在,若不存在则创建路径 
 DirectoryInfo upDir = new DirectoryInfo(phyPath); 
 if(!upDir.Exists) 
 { 
  upDir.Create(); 
 }
 //保存文件 
 try 
 { 
  postedFile.SaveAs(phyPath + fileName);

  fp.FilePath = filePath + fileName; 
  fp.FileExtension = fileExtension; 
  fp.FileName = fileName; 
 } 
 catch 
 { 
  throw new ApplicationException("上传失败!"); 
 }

 //返回上传文件的信息 
 return fp; 
}   

然后我们在上传文件的时候就可以调用这个方法了,将返回的文件信息保存到数据库中,至于下载,就直接打开那个路径就OK了。

  第三部分:这里我们主要说一下如何以二进制的形式上传文件以及下载。首先说上传,方法如下:

public byte[] UpLoadFile(HtmlInputFile f_IFile) 
{ 
 //获取由客户端指定的上传文件的访问 
 HttpPostedFile upFile=f_IFile.PostedFile; 
 //得到上传文件的长度 
 int upFileLength=upFile.ContentLength; 
 //得到上传文件的客户端MIME类型 
 string contentType = upFile.ContentType; 
 byte[] FileArray=new Byte[upFileLength];

 Stream fileStream=upFile.InputStream;

 fileStream.Read(FileArray,0,upFileLength); 
 return FileArray; 
}   

这个方法返回的就是上传的文件的二进制字节流,这样我们就可以将它保存到数据库了。下面说一下这种形式的下载,也许你会想到这种方式的下载就是新建一个 aspx页面,然后在它的Page_Load()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:

  首先,在Web.config中加入: <add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>  这表示我打开openfile.aspx这个页面时,系统就会自动转到执行RuixinOA.Web.BaseClass.OpenFile 这个类里的方法,具体实现如下:

using System; 
using System.Data; 
using System.Web; 
using System.IO; 
using Ruixin.WorkFlowDB; 
using RXSuite.Base; 
using RXSuite.Component; 
using RuixinOA.BusinessFacade;

namespace RuixinOA.Web.BaseClass 
{ 
 public class OpenFile : IHttpHandler 
 { 
  public void ProcessRequest(HttpContext context) 
  { 
   //从数据库中取出要下载的文件信息 
   RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager(); 
   EntityData data = os.GetFileDetail(id);

   if(data != null && data.Tables["RX_OA_File"].Rows.Count >0) 
   { 
    DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0]; 
    context.Response.Buffer = true; 
    context.Response.Clear(); 
    context.Response.ContentType = dr["CContentType"].ToString(); 
    context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString())); 
    context.Response.BinaryWrite((Byte[])dr["CContent"]); 
    context.Response.Flush(); 
    context.Response.End(); 
   } 
  } 
  public bool IsReusable 
  {   
   get { return true;} 
  } 
 } 
}   

执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。

  第四部分:这一部分主要说如何上传一个Internet上的资源到服务器。

首先需要引用 System.Net 这个命名空间,然后操作如下: HttpWebRequest hwq = (HttpWebRequest)WebRequest.Create("http://localhost/pwtest/webform1.aspx"); 
HttpWebResponse hwr = (HttpWebResponse)hwq.GetResponse(); 
byte[] bytes = new byte[hwr.ContentLength]; 
Stream stream = hwr.GetResponseStream(); 
stream.Read(bytes,0,Convert.ToInt32(hwr.ContentLength)); 
//HttpContext.Current.Response.BinaryWrite(bytes);

HttpWebRequest 可以从Internet上读取文件,因此可以很好的解决这个问题。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET数据库操作类实例
  • ASP.NET导出word实例
  • asp.net反射简单应用实例
  • ASP.NET中的C#基础知识
  • asp.net core mvc实现文件上传实例
  • ASP.NET Core 导入导出Excel xlsx 文件实例
  • Asp.net中安全退出时清空Session或Cookie的实例代码
  • asp.net保存网上图片到服务器的实例
  • asp.net多文件上传实例讲解
  • ASP.Net分页的分页导航实例

相关文章

  • 2017-05-11ASP.Net 请求响应流程简述
  • 2017-05-11asp.net SAF 中缓存服务的实现第1/5页
  • 2017-05-11Asp.Net、asp实现的搜索引擎网址收录检查程序
  • 2017-05-11Repeater与ListView功能概述及使用介绍
  • 2017-05-11ASP.NET2.0数据库入门之SQL Server
  • 2018-08-20.NET读写Excel工具Spire.Xls使用 Excel文件的控制(2)
  • 2017-05-11asp.net两级联动(包含添加和修改)
  • 2017-05-11如何轻松搭建Windows8云平台的开发环境
  • 2017-05-11精彩回顾!Visual Studio 2017正式版发布全纪录
  • 2017-05-11ASP.NET Page函数调用顺序解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 去除HTML标签删除HTML示例代码
    • Windows Server 2012 R2 Standard搭建ASP.NET Core环境图文教程
    • 在ASP.NET 2.0中操作数据之六十:创建一个自定义的Database-Driven Site Map Provider
    • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例
    • ASP.net连接Excel的代码
    • ASP.NET MVC传送参数至服务端详解及实例
    • MVC实现下拉框联动效果(单选)
    • 最简单的.NET生成随机数函数
    • ASP.NET设计网络硬盘之上传文件实现代码
    • ASP.NET中操作数据库的基本步骤分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有