您现在的位置: 网页制作教程网 >> 网络编程 >> Asp.net 教程 >> ASP.NET 开发技巧 >> 文章正文

ASP.NET中文件上传下载方法概述

作者:张荣华

来源:ASPCool

热度:

2007-11-19 0:20:54


   
    第二部分:
  
  下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息。
  
  首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。
以下是引用片段:
 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()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:

上一页  [1] [2] [3] 下一页


我来说两句:

1分 2分 3分 4分 5分
姓名: *


* 请各位网友遵纪守法并注意语言文明。
网站简介 | 联系方式 | 意见建议 | 版权说明
Copyright © 2007 All rights reserved
滇ICP备06006992号