ASP.NET网站 文件的上传与下载(二)

    前些天已经把相关的知识点罗列出来了,今天把关键的代码部分粘过来,做一个小的参考啦~

    文件的上传操作,主要流程是FileUpload控件在缓存中的存取,把文件读取到缓存,把文件信息记录于数据库,代码如下:

    

     /// <summary>
    /// 用于保存当前页面上传文件控件集到缓存中
    /// </summary>
    protected void SaveFUC()
    {
        //创建动态增加数组
        ArrayList AL = new ArrayList();
        foreach (Control C in tabFU.Controls)
        {
            if (C.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlTableRow")
            {
                HtmlTableCell HTC = (HtmlTableCell)C.Controls[0];
                foreach (Control FUC in HTC.Controls)
                {
                    //判断该控件是否为上传控件(FileUpLoad),如果是,则添加到ArrayList中
                    if (FUC.GetType().ToString() == "System.Web.UI.WebControls.FileUpload")
                    {
                        FileUpload FU = (FileUpload)FUC;
                        AL.Add(FU);
                    }
                }
            }
        }
        //将保存在数组ArrayList中的所有上传控件(FileUpLoad),添加到缓存中,命名为“FilesControls”
        Session.Add("FilesControls", AL);
    }
  /// <summary>
    /// 用于读取缓存中存储的上传文件控件集
    /// </summary>
    protected void GetFUCInfo()
    {
        ArrayList AL = new ArrayList();
        //判断缓存中是否已存在上传控件
        if (Session["FilesControls"] != null)
        {
            //将缓存中的上传控件集存放在数据集ArrayList中
            AL = (System.Collections.ArrayList)Session["FilesControls"];
            for (int i = 0; i < AL.Count; i++)
            {
                HtmlTableRow HTR = new HtmlTableRow();
                HtmlTableCell HTC = new HtmlTableCell();
                HTC.Controls.Add((System.Web.UI.WebControls.FileUpload)AL[i]);
                HTR.Controls.Add(HTC);
                //将上传控件添加到名为tabFU表格中
                tabFU.Rows.Add(HTR);
            }
        }
    }

    /// <summary>
    /// 用于执行文件上传操作
    /// </summary>
    //文件是否上传(1:上传成功,0:文件未被上传)
    public static int IntIsUF = 0;
    private void UpFile()
    {
        //获取文件保存的路径
        string FilePath = Server.MapPath(".//") + "Files";
        //获取由客户端上载文件的控件集合
        HttpFileCollection HFC = Request.Files;
        for (int i = 0; i < HFC.Count; i++)
        {
            //对客户端已上载的单独文件的访问
            HttpPostedFile UserHPF = HFC[i];
            try
            {
                if (UserHPF.ContentLength > 0)
                {
                    //调用GetAutoID方法获取上传文件自动编号
                    int IntFieldID = CC.GetAutoID("fileID", "tb_files");
                    //文件的真实名(格式:[文件编号]上传文件名)
                    //用于实现上传多个相同文件时,原有文件不被覆盖
                    string strFileTName = "[" + IntFieldID + "]" + System.IO.Path.GetFileName(UserHPF.FileName);
                    //定义插入字符串,将上传文件信息保存在数据库中
                    string sqlStr = "insert into tb_files(fileID,fileName,fileLoad,fileUpDate,fileTrueName)";
                    sqlStr += "values('" + IntFieldID + "'";
                    sqlStr += ",'" + System.IO.Path.GetFileName(UserHPF.FileName) + "'";
                    sqlStr += ",'" + FilePath + "'";
                    sqlStr += ",'" + DateTime.Now.ToLongDateString() + "'";
                    sqlStr += ",'" + strFileTName + "')";
                    //打开与数据库的连接
                    SqlConnection myConn = CC.GetConnection();
                    myConn.Open();
                    SqlCommand myCmd = new SqlCommand(sqlStr, myConn);
                    myCmd.ExecuteNonQuery();
                    myCmd.Dispose();
                    myConn.Dispose();
                    //将上传的文件存放在指定的文件夹中
                    UserHPF.SaveAs(FilePath + "//" + strFileTName);
                    IntIsUF = 1;
                }
            }
            catch
            {
                //文件上传失败,清空缓存中的上传控件集,重新加载上传页面
                if (Session["FilesControls"] != null)
                {
                    Session.Remove("FilesControls");
                }
                Response.Write(CC.MessageBox("处理出错!", "AddFile.aspx"));
                return;
            }

        }
        //当文件上传成功或者没有上传文件,都需要清空缓存中的上传控件集,重新加载上传页面
        if (Session["FilesControls"] != null)
        {
            Session.Remove("FilesControls");
        }
        if (IntIsUF == 1)
        {
            IntIsUF = 0;
            Response.Write(CC.MessageBox("上传成功!", "AddFile.aspx"));
        }
        else
        {
            Response.Write(CC.MessageBox("请选择上传文件!", "AddFile.aspx"));
        }
    }
    protected void btnAddFU_Click(object sender, EventArgs e)
    {
        //执行添加上传控件方法
        InsertFUC();
    }
    protected void btnUp_Click(object sender, EventArgs e)
    {
        //执行上传文件
        UpFile();
    }

}

     接下来,是文件的下载代码:

 

protected void imgbtnDF_Click(object sender, ImageClickEventArgs e)
    {
        //获取imgbtnDelete的ImageButton对象
        ImageButton imgbtn = (ImageButton)sender;
        //引用imgbtnDelete控件的父控件上一级控件
        GridViewRow gvr = (GridViewRow)imgbtn.Parent.Parent;
        //获取文件真实姓名
        string sqlStr = "select fileTrueName from tb_files where fileID='" + Gv.DataKeys[gvr.RowIndex].Value.ToString() + "'";
        //打开数据库
        SqlConnection myConn = getConnection();
        myConn.Open();
        SqlDataAdapter dapt = new SqlDataAdapter(sqlStr, myConn);
        DataSet ds = new DataSet();
        dapt.Fill(ds, "files");
        //获取文件路径
        string strFilePath = Server.MapPath("Files//" + ds.Tables["files"].Rows[0][0].ToString());
        Response.Write("<script>alert('" + strFilePath + "')</script>");
        ds.Dispose();
        myConn.Close();
        //下载指定的文件
        if (File.Exists(strFilePath))
        {
            
            System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = true;
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(file.Name));
            Response.AppendHeader("Content-Length", file.Length.ToString());
            Response.WriteFile(file.FullName);
            Response.Flush();
            Response.End();
        }

    }

      就这个样子啦~

      又过晚上了,每天这个时候是我又开心又绝望啊... ...我好像患上了一种夜晚暴食症啊,每天到晚上分分钟管不住自己的嘴啊,好痛苦。

      送给大家一句话,千万不要在晚上做任何决定,嗯..比如,这些东西买回家做早餐,明天可以多睡会儿。。。呵呵,下一秒变夜宵哦~【闭嘴】

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值