c#文件上传源代码

文件上传这里分上传到服务器的文件夹和数据库

1:上传到文件夹

首先看aspx页面:

程序代码:

<tr bgcolor="#ffffff">

<td height="24">

<input type="file" ></asp:Button>

</TD>

</TR>

下面是后台,及"文件上传"按钮触发的事件:

程序代码:

private void submit_Click(object sender, System.EventArgs e)

{

HttpPostedFile postedFile = this.Up_file.PostedFile; //得到要上传文件

string fileName, fileExtension;

fileName = System.IO.Path.GetFileName(postedFile.FileName); //文件名称

if (fileName != "")

{

fileExtension = System.IO.Path.GetExtension(fileName); //上传文件的扩展名

string new_filename = fileExtension; //给文件重新命名

//postedFile.FileName: 客户端文件地址

//postedFile.ContentType.ToString(): 上传的文件类型

//保存文件到文件夹,地址是当前页面的同一级目录下的files文件夹中

postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("files/") + new_filename);

//.....可以把文件的相应信息保存到数据库中去。

}

}

在显示这些文件信息的时候,可以直接链接文件地址。

2:上传到数据库

程序代码:

private void submit_Click(object sender, System.EventArgs e)

{

Stream imgStream;

int docSize;

string docName;

string imgContentType;

string imgUploadedName;

imgStream = this.Up_file.PostedFile.InputStream; //二进制流

docSize = this.Up_file.PostedFile.ContentLength; //文件大小

imgUploadedName = this.Up_file.PostedFile.FileName; //文件名称

byte[] docBody=new byte[docSize];

imgContentType = this.Up_file.PostedFile.ContentType; //文件类型

docName =imgUploadedName.Substring(imgUploadedName.LastIndexOf('\\')+1);

int n = imgStream.Read(docBody, 0, docSize);

DataTable temp = mynew.Get_ZH_EngBriefing_byoid(0); //返回一个空的table

DataRow row = temp.NewRow();

//.....省略其他保存代码

row["DOWN_PATH"] = docBody; //保存数据到数据库,DOWN_PATH字段为二进制

row["FILENAME"] = docName; //保存文件名称

row["LX"] = imgContentType; //保存文件类型

temp.Rows.Add(row);

mynew.SaveZHEngBriefing(temp);

}

在显示这些文件信息时,如果要实现下载,可以参考下面的代码:

1):当放置到datagrid中时,必须绑定数据到模板列,比如:

程序代码:

<asp:TemplateColumn HeaderText="文件下载">

<HeaderStyle HorizontalAlign="Center"></HeaderStyle>

<ItemStyle HorizontalAlign="Center"></ItemStyle>

<ItemTemplate>

<asp:LinkButton server" ToolTip='<%# "下载文件:"+DataBinder.Eval(Container.DataItem,"FILENAME").ToString() %>' Text='<%# DataBinder.Eval(Container.DataItem,"FILENAME").ToString() %>' CommandName="downFile">

</asp:LinkButton>

</ItemTemplate>

<FooterStyle HorizontalAlign="Center"></FooterStyle>

</asp:TemplateColumn>

利用datagrid的ItemCommand事件来实现下载

程序代码:

private void Eng_briefing_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

if (e.CommandName == "downFile")

{

long EngBriefing_OID = long.Parse(Eng_briefing.Items[e.Item.ItemIndex].Cells[0].Text.ToString()); //首先返回要下载数据的相应行记录关键字OID

DataTable file = mynew.Get_ZH_EngBriefing_byoid(EngBriefing_OID); //获取该文件所在行记录(这里Get_ZH_EngBriefing_byoid方法是我自己的一个定义的根据OID来返回table)

if (file.Rows.Count > 0)

{

Response.Clear();

Response.Buffer = false;

Response.AppendHeader("Content-Disposition","attachment; filename="+HttpUtility.UrlEncode(file.Rows[0]["FILENAME"].ToString(),System.Text.Encoding.UTF8));

Response.BinaryWrite((byte[])file.Rows[0]["DOWN_PATH"]);

Response.End();

}

}

}

当文件信息以一个LinkButton显示出来的话,就可以利用lLinkButton的onclick事件来实现:

程序代码:

<asp:linkbutton ></asp:linkbutton>

程序代码:

private void FileLink_Click(object sender, System.EventArgs e)

{

long EngBriefing_OID = long.Parse(this.L_EngBriefing_OID.Text.ToString()); //取得文件所在行的相应OID

DataTable file = mynew.Get_ZH_EngBriefing_byoid(EngBriefing_OID); //获取文件所在行信息

if (file.Rows.Count > 0)

{

Response.Clear();

Response.Buffer = false;

Response.AppendHeader("Content-Disposition","attachment; filename="+HttpUtility.UrlEncode(file.Rows[0]["FILENAME"].ToString(),System.Text.Encoding.UTF8));

Response.BinaryWrite((byte[])file.Rows[0]["DOWN_PATH"]);

Response.End();

}

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lsynb/archive/2008/04/21/2311437.aspx