FileUpload(文件上传)控件用于将文件从本地计算机上传到远程Web服务器的控件,这里简单的上传一个doc文件并显示出其相关信息。
我们添加一个FileUpload控件和Button按钮和两个Label控件,创建一个Files文件夹用于接收文件。将按钮Button1的Text属性设置为“上传”,在Page_Load中书写代码:
protected void Page_Load(object sender, EventArgs e)
{
this.Title = "文件上传页";
Label1.Visible = false;
Label2.Visible = false;
Button1.Text = "上传";
}
上传按钮被单击时执行的事件过程代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileName = FileUpload1.PostedFile.FileName;//客户端文件路径
FileInfo fFile = new FileInfo(fileName);//创建FileInfo类的实例
string WebFilePath = Server.MapPath("Files/" + fFile.Name);//服务器端文件路径
string FileType = FileUpload1.PostedFile.ContentType;//获取文件的类型
if (FileType == "application/msword")
{
if (!File.Exists(WebFilePath))//如果服务器端目标位置没有同名文件
{
try//正常上传
{
FileUpload1.SaveAs(WebFilePath);//使用SaveAs方法保存文件
Label1.Visible = true;
Label2.Visible = true;
Label1.Text = "文件" + fFile.Name + "成功上传," + "文件大小为:" + FileUpload1.PostedFile.ContentLength + "字节";
}
catch (Exception ex)
{
Label1.Visible = true;
Label1.Text = "文件上传失败,失败原因:" + ex.Message;
}
}
else
{
Label1.Visible = true;
Label1.Text = "文件已经存在,请重命名后上传";
}
}
else
{
Label1 .Visible =true;
Label1 .Text ="文件类型不符,只能上传*.doc类型的文件";
}
}
else
{
Label1 .Visible =true;
Label1 .Text="请选择文件或输入文件路径及名称!";
}
}
此外还可以用System.IO.Directory类来写,后面再作整理。然后我们在添加一个Button按钮,用于下载我们刚上传的文档:
protected void Button2_Click(object sender, EventArgs e)
{
string fileName = Session["fname"].ToString();
string WebFilePath = Server.MapPath("Files/"+fileName);//服务器端文件路径
FileInfo fileInfo = new FileInfo(WebFilePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}