【asp源码栏目提醒】:网学会员为广大网友收集整理了,ASP.NET典型模块与项目实战大全(第8章) - 网络与通信,希望对大家有所帮助!
第 8 章 上传和下载模块 (多文件上传超大附件上传) 上传和下载是实现网络数据资源共享的一种重要手段。
通过上传文件,可以将本地资源上传到远程服务器中,当用户需要这些资源文件的时候,可以通过服务器下载。
本章将讲解与上传和下载相关的一些知识,具体包括上传与下载文件的具体实现、实现多文件上传等一些相关的内容。
8.1 简单的上传与下载 上传是将文件按照某种特定的格式和规范,放置到网络中指定的某个地方;下载是将网络中的共享数据保存到本地计算机系统中的一种实现方法。
上传和下载目前主要应用在网络后台管理、邮箱和论坛等信息交流比较频繁的网络应用中,是用户实现网络数据资源共享的主要手段。
8.1.1 上传文件的实现 通常情况下,上传文件是指将本地文件上传到远程的服务器中。
在
ASP.NET 中,上传文件通常使用 FileUpload 控件来实现,FileUpload 控件由一个文本框和一个按钮控件组成,用户在单击按钮控件时会弹出一个选择上传文件的对话框,在选择了上传文件之后,通过执行上传操作将所选文件上传到远程服务器中。
注意:上传文件主要有两个目的,一个是网站所在的服务器,另一个是网站所提供的数 据库。
用户可以将本地文件上传到服务器或者网站数据库中,但通常情况下,文 件资源都是上传到服务器中的。
1.上传文件的页面设计 上传文件的页面设计步骤如下所示。
(1)新建一个网站,在网站中添加一个名称为 UpFile 的 Web 窗体。
在 Web 窗体上添加一个具有 3 行 1 列的表格。
(2)在表格的第 1 行中输入“上传文件到服务器”;在表格的第 2 行中添加一个 FileUpload控件;在表格的第 3 行中添加一个按钮控件,用于实现将 FileUpload 控件选择的本地文件上传到网站服务器的功能。
第2篇
ASP.NET 典型模块开发与应用 设计完成后的上传文件页面如图 8.1 所示。
图 8.1 设计完成后的上传文件页面 2.上传文件的代码实现 在完成 Web 窗体的页面设计之后,在页面的代码窗口中编写上传文件方法的程序代码,具体的实现代码如下: ///ltsummarygt ///文件上传函数 ///lt/summarygt ///ltparam namequotpathquotgt将文件上传的服务器路径lt/paramgt ///ltparam namequotfileuploadquotgt上传文件的控件名称lt/paramgt public void UpLoadstring path System.Web.UI.WebControls.FileUpload fileupload bool fileOK false //设置一个布尔变量,并且将初始值赋为假 if fileupload.HasFile string fileException System.IO.Path.GetExtensionfileupload. FileName.ToLower //上传文件的格式 string allowedException quot.xlsquot quot.docquot quot.mppquot quot.rarquot quot.zipquot quot.vsdquot quot.txtquot quot.jpgquot quot.gifquot quot.bmpquot quot.pngquot quot.swfquot quot.aviquot quot.mp3quot quot.rmquot quot.wmaquot quot.wmvquot for int i 0 i lt allowedException.Length i if fileException allowedExceptioni fileOK true //返回成功的标识 if fileOK //判断上传的文件是否在指定的格式范围之内 //判断文件是否存在,如不存在则创建路径 if System.IO.Directory.Existspath //该目录存在,则将上传的文件保存在该目录当中 else System.IO.Directory.CreateDirectorypath //创建文件路径 fileupload.SaveAspath quotquot fileupload.FileName //执行上传文件的操作 else throw new Exceptionquot不支持此格式文件上传quot154 第8章 上传和下载模块(多文件上传超大附件上传) 【代码解析】上述代码中,能够上传 Word、Excel、各种音视频文件和各种压缩格式的文件等数据文件。
如果文件上传成功,则函数返回 true;否则如果文件上传失败,则函数返回 false。
说明:在上传函数的代码中,可以根据实际需要删减上传文件的指定格式。
在页面中“上传”按钮的单击事件下,添加调用文件上传函数 UpLoad的程序代码如下,实现将选择的文件上传到服务器中的操作。
protected void Button1_Clickobject sender EventArgs e string FilePath quotquot //声明一个字符串变量 //是否有上传文件 if this.FileUpload1.FileName null ampamp this.FileUpload1.FileName quotquot if FileUpload1.PostedFile.ContentLength lt 0 Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件为空文件,请重 新选择lt/scriptgtquot return else if FileUpload1.HasFile if FileUpload1.PostedFile.ContentLength gt 4196304 //单位字节,大于 MB Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件过大 lt/scriptgtquot return else FilePath Server.MapPathquot/Imagesquot //设置服务器文件路径 UpLoadFilePath this.FileUpload1 //调用 UpLoad函数上传文件 Page.RegisterStartupScriptquotssquot quotltscriptgtalert文件成功上传 lt/scriptgtquot //如果上传文件错误,则返回操作 else Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件路径错误 lt/scriptgtquot return 【代码解析】在上述代码中,首先判断是否选择了上传文件。
在选择了上传文件之后,再判断上传的文件是否大于 4M,如果上传文件小于 4M 则执行上传文件的操作,否则将取消执行文件上传的操作,具体实现流程如图 8.2 所示。
155 第2篇
ASP.NET 典型模块开发与应用 图 8.2 执行文件上传操作的流程图 3.上传文件的实现效果 在编写完上传文件到服务器功能之后,下面讲解将文件上传到服务器的操作方法。
将的 UpFile Web 窗体设置为起始页,运行程序。
单击“浏览”按钮选择要上传的文件,选择完成之后单击“上传”按钮,执行将所选文件上传到服务器中的操作,如图 8.3 所示。
上传到服务器中的文件如图 8.4 所示。
图 8.3 上传文件 图 8.4 上传到服务器中的文件8.1.2 下载文件的实现 下载文件是从网络中获得文件资源的主要手段,在
ASP.NET 中没有提供下载文件的控件,但可以通过 FileStream 流的方式和 Response 对象的 Write方法,编写下载函数实现下载文件的操作。
下面讲解下载文件操作的具体实现。
1.下载文件的页面设计 下载文件的页面设计步骤如下所示。
(1)新建一个网站,在网站中添加一个名称为 DownFile 的 Web 窗体。
在 Web 窗体上添加一个具有 3 行 1 列的表格。
(2)在表格的第 1 行中输入“从服务器上下载文件”;在表格的第 2 行中添加一个 ListBox控件,用于显示下载文件的名称;在表格的第 3 行中添加一个按钮控件,用于实现从服务器上下载文件的操作。
设计完成后的下载文件页面如图 8.5 所示。
156 第8章 上传和下载模块(多文件上传超大附件上传) 图 8.5 设计完成后的下载文件页面 2.下载文件的代码实现 在编写下载文件的程序代码之前,需要在代码窗口中首先添加下面的引用代码。
using System.IO 在加载页面时,需要将下载文件夹中所有下载资源的名称显示在页面的 ListBox 控件中,以方便用户进行选择下载,具体实现代码如下: protected void Page_Loadobject sender EventArgs e if Page.IsPostBack //页面加载时,获取下载文件的存放目录 string strfilepath Server.MapPathquot/Images/quot //创建目录对象 DirectoryInfo dir new DirectoryInfostrfilepath //获得该目录下的所有文件 FileSystemInfo files dir.GetFileSystemInfos //将遍历的文件名称显示在 ListBox 控件中 ListItem items foreach FileSystemInfo infoflies in files items new ListItem //声明一个 ListItem 对象 items.Text infoflies.Name items.Value infoflies.FullName ListBox1.Items.Additems //向 ListBox 控件中添加数据信息 【代码解析】上述代码中,通过 DirectoryInfo 对象获取文件目录信息,通过 File-SystemInfo 对象获取文件目录中的文件名称。
编写下载文件方法的程序代码,具体的实现代码如下: ///ltsummarygt ///文件下载函数 ///lt/summarygt ///ltparam namequotfileURLquotgt要下载文件所在的路径lt/paramgt public Boolean DownLoadstring fileURL Boolean Dok false try 157 第2篇
ASP.NET 典型模块开发与应用 string FullPathURL Server.MapPathfileURL//获取下载文件的路径 //System.IO.FileInfo DownloadFile new System.IO.FileInfo FullPathURL System.IO.FileInfo file new System.IO.FileInfoFullPathURL if file.Exists //判断要下载的文件是否存在 Response.Clear //清空 Response 对象中的内容 //修改前做法 //Response.AddHeaderquotContent-Dispositionquot quotattachment filenamequot file.Name //修改后做法 Response.AddHeaderquotContent-Dispositionquot quotattachmentfilenamequot HttpUtility.UrlEncodefile.Name Response.AddHeaderquotContent-Lengthquot file.Length.ToString Response.ContentType quotapplication/application/octet-streamquot Response.WriteFilefile.FullName //通过 Response 对象执行下载文件的操作 Response.End //结束 Response 对象 Response.Flush //刷新 Response 对象 Response.Clear //清空 Response 对象中的内容 Dok true else this.Page.RegisterStartupScriptquotssquot quotltscriptgtalert文件不 存在lt/scriptgtquot Catch //如果出现操作错误,则执行 Catch 语句块中的程序代码 this.Page.RegisterStartupScriptquotssquot quotltscriptgtalert文件不存在 lt/scriptgtquot return Dok //返回 Dok,提示下载操作是否成功 【代码解析】上述代码中,通过 FileInfo 对象获取要下载的数据文件信息,然后通过Response 对象将要下载的文件保存到目标路径中。
编写完下载文件方法的程序代码之后,在“下载”按钮的单击事件下添加调用下载函数 DownLoad 的程序代码如下: protected void Button1_Clickobject sender EventArgs e //获得下载文件的路径 string downfiles quotImages/quot ListBox1.SelectedItem.Text DownLoaddownfiles //调用 DownLoad方法,执行下载文件的操作 3.下载文件的实现效果 下面来看一下从网络中下载文件资源的操作方法。
将 DownFile Web 窗体设置为起始页,运行程序。
选择列表中要下载资源文件的名称,如图 8.6 所示。
单击“下载”按钮,弹出“文件下载”对话框,如图 8.7 所示。
在其中单击“保存”按钮,在弹出的“另存为”158 第8章 上传和下载模块(多文件上传超大附件上传)对话框中选择下载文件的保存路径,单击“保存”按钮保存所下载的文件。
图 8.6 下载文件 图 8.7 “下载文件”对话框 8.2 上传、下载的具体应用 上传、下载功能可以用于网络资源管理、邮件附件管理和通知公告附件管理等诸多方面。
前面讲解了上传、下载功能的具体实现方法,本节中将以在网络中通过上传、下载通知公告附件为例,来讲解上传、下载功能的具体应用。
8.2.1 上传通知公告中的文件附件 在企事业单位的内部网站中,可以通过在网站中发布通知和公告的方式,向员工传达一些重要的数据信息。
然而,在发布通知和公告时,通常需要附带一些资料文件,如在网站中发布关于员工体检通知的公告时,同时需要附带一个“员工体检表”表单,这个表单通常以附件的形式上传到网站服务器中。
下面就讲解在网站中,上传通知公告中的文件附件的实现方法。
1.发布通知公告的页面设计 发布通知公告的页面设计步骤如下所示。
(1)新建一个网站,在网站中添加一个名称为 UpLoadFile 的 Web 窗体。
在 Web 窗体上添加一个具有 3 行 1 列的表格。
(2)在表格的第 1 行中输入“通知公告信息发布”;在表格的第 2 行中再添加一个具有 4 行 2 列的表格,在表格的第 1 列中输入发布通知公告信息的标签,在表格的第 2 列中分别添加文本框控件、FileUpload 控件和按钮等控件;在表格的第 3 行中添加两个按钮控件,用于实现发布通知公告及其附件的功能。
发布通知公告的设计页面如图 8.8 所示。
2.发布通知公告的代码实现 在选择了要上传的通知公告附件之后,单击“上传”按钮将通知公告附件上传到服务器中,具体实现代码如下: 159 第2篇
ASP.NET 典型模块开发与应用 图 8.8 发布通知公告的设计页面 protected void Button4_Clickobject sender EventArgs e string FilePath quotquot //是否有上传文件 if this.FileUpload1.FileName null ampamp this.FileUpload1.FileName quotquot if FileUpload1.PostedFile.ContentLength lt 0 //如果没有上传文件 Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件为空文件,请重 新选择lt/scriptgtquot Else //执行上传文件到服务器的操作 if FileUpload1.HasFile //如果上传文件大于 4MB,则停止上传文件的操作 if FileUpload1.PostedFile.ContentLength gt 4196304 //单位字节,大于 4MB Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件过大 lt/scriptgtquot return //执行上传文件的操作 else FilePath Server.MapPathquot/Imagesquot //设置文件保存的路径 //获取图片保存路径信息 SessionquotFilePathsquot quotImagesquot FileUpload1.FileName UpLoadFilePath this.FileUpload1 //执行上传文件的操作 Page.RegisterStartupScriptquotssquot quotltscriptgtalert文件成功上传 lt/scriptgtquot else Page.RegisterStartupScriptquotssquot quotltscriptgtalert上传文件路径错误 lt/scriptgtquot 160 第8章 上传和下载模块(多文件上传超大附件上传) 【代码解析】上述代码中,首先判断是否选择了要上传的附件文件。
在选择了上传文件附件之后,再判断上传的文件附件是否大于 4M,如果小于 4M 则执行上传文件附件的操作,否则将取消执行文件上传的操作。
说明:在实现上传通知公告附件时,应用到了文件上传函数 UpLoad,有关 UpLoad 函数的程序代码请参考 8.1.1 节中的程序代码。
在“提交”按钮的单击事件下添加发布通知公告信息的程序代码,实现发布通知公告信息的功能,具体实现代码如下: protected void Button6_Clickobject sender EventArgs e if TextBox1.Text quotquot TextBox2.Text quotquot Page.RegisterStartupScriptquotssquot quotltscriptgtalert名称和链接网址信息不能 为空lt/scriptgtquot return else //连接数据库 SqlConnection sqlcon new SqlConnectionConfigurationManager.ConnectionStringsquotconnectionquot. ConnectionString sqlcon.Open //打开数据连接 string strselect quotselect from tb_tzgg where titletitlequot SqlCommand sqlcmd new SqlCommandstrselect sqlcon //添加参数并且设置参数的值 sqlcmd.Parameters.Addquottitlequot SqlDbType.VarChar sqlcmd.Parametersquottitlequot.Value this.TextBox1.Text.ToString //执行查询,判断保存的数据记录是否存在 SqlDataReader dr sqlcmd.ExecuteReader if dr.Read //执行读数据的操作 this.Page.RegisterStartupScriptquotssquot quotltscriptgtalert信息已经提交请 不要重复提交记录信息lt/scriptgtquot return dr.Close //关闭读操作 //插入数据信息 string StrInsert quotquot StrInsert quotinsert into tb_tzggtitlecontentsauthordatespaths valuestitlecontentsauthordatespathsquot SqlCommand cmd new SqlCommandStrInsert sqlcon //添加参数并且设置参数值 cmd.Parameters.Addquottitlequot SqlDbType.VarChar 50 cmd.Parametersquottitlequot.Value TextBox1.Text cmd.Parameters.Addquotcontentsquot SqlDbType.VarChar 50000 cmd.Parametersquotcontentsquot.Value this.TextBox3.Text cmd.Parameters.Addquotauthorquot SqlDbType.VarChar 50 cmd.Parametersquotauthorquot.Value .