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

2019-05-12 05:02:38丽君

 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()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法: