您的位置:首页 > 编程语言 > ASP

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

2016-02-24 16:55 615 查看
    前些天已经把相关的知识点罗列出来了,今天把关键的代码部分粘过来,做一个小的参考啦~

    文件的上传操作,主要流程是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();
}

}
      就这个样子啦~

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

      送给大家一句话,千万不要在晚上做任何决定,嗯..比如,这些东西买回家做早餐,明天可以多睡会儿。。。呵呵,下一秒变夜宵哦~【闭嘴】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .NET 文件上传