实验七  文件上传和下载
[适用对象]
[实验学时]
一、 实验目的
通过编写一个简单的文件管理系统实现文件的上传和下载,练习使用VS2005windows系统下实现文件从客户端到管理端的传输,了解数据上传下载的设计原理。
二、 实验要求
1.能使用VS2005windows系统下利用web各类控件特别是数据上传控件搭建一个文件管理的界面。
2.能对对该系统中所用的控件特别是数据上传控件设置好各项属性。
3.能利用C#语言控制客户端文件和管理服务器端文件。
4.能够完整的实现一个文件管理系统基本操作,主要功能包括:用户从客户端选择上传文件上传到服务器, 并能从客户端选择下载存储在服务器端的文件。
三、 实验环境
软件要求:vs2005
操作系统:windows xp
需要实验室开放Internet网络方便学生下载网页素材。
四、 相关知识点
1. 熟悉session下载vs2005里用数据上传控件的使用。
2. 熟悉客户端,服务器端文件访问的方式。
3. 熟悉用C#语言控制文件的操作。
五、 实验步骤
1. 分析一个简单的文件上传下载管理系统所具备的功能,如下图所示。
1)首先构建一个文件上传界面。
2)用户后可以查看服务器上已经上传好了的文件并可以点击下载。
2.按照要求编写上传下载文件系统的关键代码,以下代码可以做为参考使用。
(1)上传文件
  使用FileUpload1控件,只能传小文件
具体程序如下:
try
        {
          #region 判断文件大小
            int intFileLength = this.FileUpload1.PostedFile.ContentLength;
            if (intFileLength > 5000)
            {
                this.Label1.Text = "文件大于5k,不能上传";
                return;
            }
            #endregion
          #region 判断保存的文件夹是否存在
            string strUpPath = @"upfile\" + System.DateTime.Now.ToShortDateString();// +@"\";
            string time = System.DateTime.Now.ToString();
            //文件夹不存在的时候,创建文件夹
            if (!System.IO.Directory.Exists(Server.MapPath(strUpPath)))
            {
                System.IO.Directory.CreateDirectory(Server.MapPath(strUpPath));
            }
           
            string strUrl = Server.MapPath(strUpPath + @"\" + this.FileUpload1.FileName);
            #endregion
           
            //上传文件
         
            SqlConnection sco = new SqlConnection(strConnection);
            sco.Open();
            SqlCommand somm = sco.CreateCommand();
            somm.CommandText = "insert into 文件 values ('" + this.FileUpload1.FileName.ToString() + "','" + time + "' ,'" + strUrl + "')";
            try
            {
                somm.ExecuteNonQuery();
            }
            catch
            {

            }
            sco.Close();
            this.FileUpload1.SaveAs(strUrl);
            this.Label1.Text = "文件上传成功";
        }
        catch (System.Exception ex)
        {
            this.Label1.Text = "文件上传失败:" + ex.Message;
        }
(2)下载文件
    不需使用控件
        System.IO.Stream iStream = null;
        string strUrl="";
        byte[] buffer = new Byte[10000];
        int length;
        long dataToRead;
        try
        {
         
            // 判断文件大小
            //int intFileLength = this.FileUpload1.PostedFile.ContentLength;
         
     
            SqlConnection sco = new SqlConnection(strConnection);
            sco.Open();
            SqlCommand somm = sco.CreateCommand();
            somm.CommandText = "select * from 文件 where 文件名='" + Session["文件名"].ToString() + "' and 时间='" + Session["时间"].ToString() + "'";
            try
            {
                SqlDataReader reader = somm.ExecuteReader();
                if (reader.Read() == true)
                {
                    string strUpPath = @"upfile\" + Convert.ToDateTime(Session["时间"].ToString()).ToShortDateString();
                    strUrl = Server.MapPath(strUpPath + @"\" + Session["文件名"].ToString());
                }
            }
            catch
            {
            }
            string filepath = strUrl;
            // 得到文件名.
            string filename =Session["文件名"].ToString() ;
        //  Response.Redirect(strUrl);
         
            sco.Close();
            try
        {
            // 打开文件.
            iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                        System.IO.FileAccess.Read, System.IO.FileShare.Read);

            // 得到文件大小:
            dataToRead = iStream.Length;
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename="+filename);
            while (dataToRead > 0)
            {
                //保证客户端连接
                if (Response.IsClientConnected)
                {
                  length = iStream.Read(buffer, 0, 10000);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。