《ASP.NET2.0程序设计教程教学课件第8章节文件处理》由会员分享,可在线阅读,更多相关《ASP.NET2.0程序设计教程教学课件第8章节文件处理(38页珍藏版)》请在金锄头文库上搜索。
1、第 8 章 文件处理,【学习目标】,信息是网络交流的一种重要媒体,将数据信息放到网络上共享,已成为网络资源发展的一个重要阶段。本章主要介绍如何将数据放到网络上共享,以及如何使用共享的数据。通过学习本章内容,读者可以达到以下学习目的。 学习上传文件到服务器。 学习从服务器下载文件。 掌握上传图片到数据库的方法。 掌握从数据库中下载上传的图片文件。 学习多文件的上传(即批量上传文件)。,【学习导航】,本章首先介绍简单的上传文件到服务器,以及上传到服务器后如何实现下载,接着讲解复杂的文件上传与下载,这时主要是将图片文件以二进制的形式上传到服务器并实现下载操作,最后介绍一个多文件上传的方法。本章内容在
2、本书中的位置如图8-1所示。,【知识框架】,本章内容知识框架如图8-2所示。,本章目录,8.1 上传和下载简介 8.2 简单的上传和下载 8.3 复杂的上传和下载 8.4 多文件的上传,8.1 上传和下载简介,文件上传是一个完整的网站必须具备的功能之一。上传就是将文件按照一定的格式和规范放到服务器中指定的位置。上传时还可以限定上传文件的类型、大小,主要目的是保障网络的安全。在网站中添加文件下载功能并提供有价值的咨询信息供用户来下载,是提高网站访问量的好方法。目前,为了提高网站的访问量,许多网站都提供了图片、软件和源代码等资源的下载功能,这也是经营网站的卖点之一。下载就是将网络上的共享资源保存到
3、本地计算机中。下载时是无法对文件进行限定的,因为未下载到本机前,文件存放在网络上的服务器中不能修改。 上传与下载可应用到论坛、网络硬盘、邮箱等网络开发程序中。掌握好文件的上传与下载功能有助于理解网络中文件的读取方式和保存方法。,8.2 简单的上传和下载,上传文件到服务器 从服务器下载文件,上传文件到服务器,上传文件有两种方式,一种是将文件上传到网站所在的服务器中,另一种是将文件上传到网站提供的数据库中。本小节将重点讲解如何将文件上传到服务器中。 1上传控件FileUpload FileUpload 控件用于显示一个文本框控件和一个“浏览”按钮,用户通过FileUpload 控件可以在客户端选择
4、一个文件并将该文件上传到服务器。该控件允许用户上传图片、文本文件或其他文件。 为了保证用户选择的文件的准确性,文本框处于只读状态,不允许开发人员和用户随意修改。 下面简单介绍该上传控件的几个重要属性,说明如下。 ContentLength:上传文件的大小,以字节为单位。 FileName:获取客户端上使用 FileUpload 控件上传的文件的名称。 HasFile:获取一个值,该值指示 FileUpload 控件是否包含要上传的文件。在对要上传的文件执行操作之前,使用该属性来验证该文件是否存在。 另外,该控件还有一个重要的方法即SaveAs方法,该方法用于将上传文件的内容保存到 Web 服务
5、器上的指定路径。,上传文件到服务器,2简单上传示例 了解了上传控件FileUpload之后,下面来简单编写一个实现上传功能的示例,示例运行效果如图8-3所示。 具体实现的步骤如下。 (1)新建一个网站,命名为“SimpleUpLoad”,默认主页为“Default.aspx”。 (2)在该页面中添加一个Table控件、一个FileUpload控件、一个Label控件和一个ImageButton控件,分别用于页面布局、选择上传文件并实现上传功能、显示提示信息和执行上传操作。 (3)在网站根目录下,新建一个文件夹“File”,用来存放上传的文件。 (4)打开Default.aspx页面,双击页面中
6、的“上传文件”按钮,打开页面的代码视图。 (5)在该按钮的Click事件中添加上传代码,在该代码中限定了上传文件的大小。具体实现的代码如下。,上传文件到服务器,protected void ImageButton1_Click(object sender, ImageClickEventArgs e) /获取上传文件名称 string FileName = TextBox1.Text.ToString(); /获取上传文件的完整路径 string FullName = FileUpload1.PostedFile.FileName.ToString(); /获取文件后缀名 string Fil
7、eType = FullName.Substring(FullName.LastIndexOf(“.“)+1); /获取保存在服务器中的文件路径 string path = Server.MapPath(“File“) + “ +FileName+“.“ + FileType; /判断是否输入上传文件名 if (FullName = “) /提示对话框 lblMessage.Text = “上传文件名不能为空!“; ,上传文件到服务器,try if (FullName != “ ,上传文件到服务器,(6)按F5键运行该程序,测试是否成功实现文件的上传功能。 (7)运行成功后,鼠标右键单击网站根
8、目录下的“File”文件夹,在弹出的快捷菜单中,选择“刷新文件夹”命令,查看上传成功的文件是否存在。,从服务器下载文件,文件的下载是实现资源共享的主要操作。ASP.NET没有提供下载控件,但提供了许多下载资源的方法并且非常容易实现,例如可以使用FileStream流的方式和Response.Write方法。本小节将重点介绍后者,并以编写一个简单的示例进行详细说明,示例运行效果如图8-4所示。 单击运行界面中的“下载文件”按钮,系统将会弹出“文件下载”对话框,如图8-5所示,然后单击“保存”按钮将下载的资源文件保存到本地计算机中。,从服务器下载文件,实现文件下载功能的步骤如下。 (1)新建一个网
9、站,将其命名为“SimpleDownLoad”,默认主页为“Default.aspx”。 (2)在Default.aspx页面中添加一个ListBox控件和一个Button控件,分别用来显示所要下载的文件资源名和执行下载功能。 (3)打开Default.aspx页的代码编辑页面Default.aspx.cs,在该页面的Page_Load事件中编写代码,将检索到的服务器中的文件名绑定至ListBox控件并显示在页面中。实现的代码如下。 protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) /获取共享的
10、文件列表 /创建一个内存表 DataTable dt = new DataTable(); /创建内存表的框架 dt.Columns.Add(new DataColumn(“Name“, typeof(string); /获取存放文件的目录 string serverPath = Server.MapPath(“File“); /创建目录对象 DirectoryInfo dir = new DirectoryInfo(serverPath);,从服务器下载文件,/遍历文件集合 foreach (FileInfo fileName in dir.GetFiles() /创建内存表的行 DataR
11、ow dr = dt.NewRow(); /读取指定目录下的文件 dr0 = fileName; /填充内存表中的行数据 dt.Rows.Add(dr); /将内存表作为ListBox控件的数据源 ListBox1.DataSource = dt; /设置文本内容字段 ListBox1.DataTextField = “Name“; /设置数据值字段 ListBox1.DataValueField = “Name“; /绑定数据 ListBox1.DataBind(); ,从服务器下载文件,(4)触发ListBox控件的SelectedIndexChanged事件,在该事件中选中行的索引,获取
12、索引的值并保存在Session变量中,代码如下。 protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) /获取选中的文件的全名 Session“txt“ = ListBox1.SelectedValue.ToString(); (5)双击Default.aspx页面中的“下载文件”按钮,触发其Click事件。在该事件中利用变量Session所保存的索引值完成文件下载功能,代码如下。 protected void ImageButton1_Click(object sender, ImageClickEv
13、entArgs e) if (Session“txt“ != “) /获取在列表控件中选择的所要下载的文件路径 string path = Server.MapPath(“File/“) + Session“txt“.ToString(); /创建目录对象 FileInfo fi = new FileInfo(path); /遍历的文件是否存在 if (fi.Exists) /清空数据流,从服务器下载文件,Response.Clear(); /清除缓冲区流中的所有头 Response.ClearHeaders(); Response.Buffer = false; /设置输出流的HTML MI
14、ME类型 Response.ContentType = “application/octet-stream“; /将下载的文件转换成中文,应用UTF8防止乱码生成 Response.AddHeader(“Content-Disposition“, “attachment;filename=“ + HttpUtility.UrlEncode(fi.Name, System.Text.Encoding.UTF8); /将HTTP流添加到输出流 Response.AppendHeader(“Content-Length“, fi.Length.ToString(); /将指定的文件直接写入HTTP响
15、应输出流 Response.WriteFile(fi.FullName); /向客户端发送所有缓冲的输出 Response.Flush(); /弹出下载成功对话框 Response.Write(“alert(文件下载成功)“); ,8.3 复杂的上传和下载,上传图片到数据库 从数据库下载图片,上传图片到数据库,为了让读者更好地理解上传图片到数据库中,本节将对一个实际项目的开发应用示例进行详细讲解和说明,示例运行效果如图8-6所示。,上传图片到数据库,实现将上传的图片以二进制形式存储到数据库中的操作步骤如下。 (1)新建一个网站,将其命名为“ImageUpload”,默认主页为“Default.aspx”。 (2)Default.aspx中涉及的控件属性设置与说明如表8-1所示。,上传图片到数据库,(3)主要的程序代码。 双击Default.aspx页面中的“提交”按钮,触发其Click事件。在该事件中实现将图片以二进制的格式保存到数据库,关键代码如下。 /=如果上传的图片以二进制形式存储到数据库= if (imgFlieUp.PostedFile.FileName != “) Stream imagestream; /获取上传文件的大小 int imgFileLen = this.imgFlieUp.PostedFile.ContentLength; /创建Byte类型 Byt