文章教程

2.6在ASP.NET中实现文件上传

8/31/2020 8:52:25 PM 人评论 次浏览

2.6 在ASP.NET中实现文件上传

学习目标

熟悉在ASP.NET中使用FileUpload Web服务器控件实现文件上传的使用方法。

本节示例代码参考:/Code/ch02/StudyFileUpload。

2.6.1 FileUpload Web服务器控件概述

当前,基于浏览器/服务器模式的应用比较流行。当用户需要将文件传输到服务器上时,常用方法之一是FTP,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行的。

如果能把文件上传功能与Web集成,使用户仅用Web浏览器就能完成上传任务,这对于用户来说将是非常方便的。在ASP.NET中通常是使用FileUpload Web服务器控件来完成的。

使用FileUpload控件,可以为用户提供一种将文件从其计算机发送到服务器的方法。FileUpload控件使用户能够上传图片、文本文件或其他文件。FileUpload控件显示一个文本框,在此用户可以输入希望上传到服务器的文件的名称。该控件还显示一个“浏览”按钮,该按钮显示一个文件导航对话框(显示的对话框取决于用户计算机的操作系统)。出于安全方面的考虑,不能将文件名预加载到FileUpload控件中。

当用户已选定要上传的文件并提交页时,该文件将作为请求的一部分上传。文件将被完整地缓存在服务器内存中。文件完成上传后,页代码开始运行。

可以通过PostedFile对象公开的一些属性,如ContentType和ContentLength属性等来处理用户上传文件的信息。对所上传文件的保存位置,没有固有限制。但是,若要保存文件,ASP.NET进程必须具有在指定位置创建文件的权限,并在保存上传文件时必须提供绝对路径(一般都是使用Server.MapPath方法即可)。

2.6.2 简单文件上传

(1)新建ASP.NET网站项目StudyFileUpload,删除默认Default.aspx页面,添加页面StudyFileUpload001.aspx,并在工具箱中的“标准”选项卡中选择一个FileUpload控件和一个按钮控件、一个Image控件添加到页面,布局页面如图2-109所示,并在该项目根目录下创建一个保存上传文件的文件夹,如“Uploadfiles”。

图2-109 页面StudyFileUpload001.aspx设计窗口显示效果

(2)在图2-109中直接双击“上传”按钮进入该按钮的单击事件编写窗口,编写上传的处理代码。

protected void btnUpload_Click(object sender, EventArgs e)
{
  FileUpload1.PostedFile.SaveAs(Server.MapPath("Uploadfiles/1.
jpg"));
  Image1.ImageUrl = "Uploadfiles/1.jpg";

}

(3)按Ctrl+F5组合键,运行显示效果如图2-110所示。

图2-110 页面StudyFileUpload001.aspx运行显示效果(1)

(4)单击图2-110中的“浏览”按钮选择一个要上传的图片文件,然后单击“上传”按钮,显示效果如图2-111所示,表示文件已经上传成功了。

图2-111 页面StudyFileUpload001.aspx运行显示效果(2)

2.6.3 受限制的文件上传

上面的文件上传没有任何限制,包括类型、大小、文件名重命名等,这在Web应用环境中显然是不能使用的,接下来就讲解如何限制上传文件的类型、大小以及文件名重命名功能。

比如限制文件上传的类型只能为.jpg,.gif,最大不能超过300KB,上传文件的名称使用当前日期的字符串和一个随机数构造,接下来讲解实现方法。

(1)在网站项目StudyFileUpload添加页面StudyFileUpload002.aspx,并布局页面如图2-109所示,并在该项目根目录下创建一个保存上传文件的文件夹例如“Uploadfiles”(如已经存在不用再创建)。

(2)首先编写一个函数用于生成新文件名,函数名称为GetFilename(),完整代码如下。

  private string GetFilename()
  {
    Random rnd = new Random();
    int a = 1000;
    int b = 9999;
    string str = string.Empty;
    //Year
    str += DateTime.Now.Year.ToString();
    //Month
    if (DateTime.Now.Month < 10)
    {
       str += "0" + DateTime.Now.Month.ToString();
    }
    else
    {
       str += DateTime.Now.Month.ToString();
    }
    //Day
    if (DateTime.Now.Day < 10)
    {
       str += "0" + DateTime.Now.Day.ToString();
    }
    else
    {
       str += DateTime.Now.Day.ToString();
    }
    //Hour
    if (DateTime.Now.Hour < 10)
    {
       str += "0" + DateTime.Now.Hour.ToString();
    }
    else
    {
       str += DateTime.Now.Hour.ToString();
    }
    //Minute
    if (DateTime.Now.Minute < 10)
    {
       str += "0" + DateTime.Now.Minute.ToString();
    }
    else
    {
       str += DateTime.Now.Minute.ToString();
    }
    //Second
    if (DateTime.Now.Second < 10)
    {
       str += "0" + DateTime.Now.Second.ToString();
    }
    else
    {
       str += DateTime.Now.Second.ToString();
    }
    //获取[a,b]之间的随机数
    str += rnd.Next(a, b).ToString();
    return str;
  }

(3)在图2-109中双击“上传”按钮进入该按钮的代码编写窗口,在其中编写如下代码。

  protected void btnUpload_Click(object sender, EventArgs e)
  {
    //获取上传文件在客户端的路径和名称比如E:\Photo\gif\50093.gif
    string Filename = FileUpload1.PostedFile.FileName;
    //获取上传文件的大小单位为字节byte
    int Filesize = FileUpload1.PostedFile.ContentLength;
    //获取上传文件的扩展名比如.gif
    string Txt = Filename.Substring(Filename.LastIndexOf(".")).ToLower();
    //定义上传文件的最大空间大小300kb
    int Maxsize = 300 * 1024;
    //定义上传文件的类型字符串
    string Filetype = ".gif,.jpg";
    //构造新文件路径和名称
    string NewFilename = "Uploadfiles/" + GetFilename() + Txt;
    if (Filetype.Contains(Txt))
    {
       //表示类型正确
       if (Filesize <= Maxsize)
       {
          FileUpload1.PostedFile.SaveAs(Server.MapPath
          (NewFilename));Response.Write(NewFilename +“上传
            成功,大小为:”+ Convert.ToInt32(Filesize / 1024).
          ToString() + "KB");
          Image1.ImageUrl = NewFilename;
       }
       else
       {
          Response.Write(“文件太大”);
       }
    }
    else
    {
       //表示类型错误
         Response.Write(“类型选择错误”);
       Response.End();
    }
  }

(4)按Ctrl+F5组合键,运行显示效果如图2-112所示。

图2-112 页面StudyFileUpload002.aspx运行显示效果(1)

(5)在图2-112中如果选择.gif,.jpg以外类型的文件后单击“上传”按钮,显示效果如图2-113所示。

图2-113 页面StudyFileUpload002.aspx运行显示效果(2)

(6)如果选择超过300KB的文件则会给出“文件太大”的错误提示,而如果正常选择上传文件后单击“上传”按钮,显示如图2-114所示。

图2-114 页面StudyFileUpload002.aspx运行显示效果(3)

教程类别