### 使用 FileUpload 控件上传图片文件

下面示例主要是使用 FileUpload 控件上传图片文件，并将原文件路径、文件大小和文件类型显示出来。执行程序，并选择图片路径，运行结果如图 1 所示，单击【上传】按钮，将图片的原文件路径、文件大小和文件类型显示出来，运行结果如图 2 所示。

图 1 选择上传图片

图 2 显示原文件路径、文件大小和文件类型

程序实现的主要步骤：

（1）新建一个网站，默认主页为 Default.aspx，在 Default.aspx 页面上添加一个 FileUpload 上传控件，用于选择上传路径，再添加一个 Button 控件，用于执行将上传图片保存在图片文件夹中，然后再添加一个 Label 控件用于显示原文件路径、文件大小和文件类型。

（2）在【上传】按钮的 Click 事件下，添加如下代码，首先判断 FileUpload 控件的 HasFile 属性是否为 True，如果为 True，则表示 FileUpload 控件已经确认上传文件存在；然后再判断文件类型是否符合要求，接着，调用 SaveAs 方法实现上传；最后，利用 FileUpload 控件的属性获取与上传文件相关的信息。

protected void Button1_Click(object sender, EventArgs e)

{

bool fileIsValid = false;

//如果确认了上传文件，则判断文件类型是否符合要求

if (this.FileUpload1.HasFile)

{

//获取上传文件的后缀

String fileExtension = System.IO.Path.GetExtension(this.FileUpload1.FileName).ToLower();

String[] restrictExtension ={ ".gif",".jpg",".bmp",".png"};

//判断文件类型是否符合要求

for (int i = 0; i < restrictExtension.Length; i++)

{

if (fileExtension == restrictExtension[i])

{

fileIsValid = true;

}

}

//如果文件类型符合要求,调用 SaveAs 方法实现上传,并显示相关信息

if (fileIsValid == true)

{

try

{

this.Image1.ImageUrl ="~/images/"+ FileUpload1.FileName;

this.FileUpload1.SaveAs(Server.MapPath("~/images/") + FileUpload1.FileName);

this.Label1.Text = "文件上传成功";

this.Label1.Text += "<Br/>";

this.Label1.Text += "<li>"+"原文件路径："+this.FileUpload1.PostedFile.FileName;

this.Label1.Text += "<Br/>";

this.Label1.Text += "<li>" + "文件大小：" + this.FileUpload1.PostedFile.ContentLength+"字节";

this.Label1.Text += "<Br/>";

this.Label1.Text += "<li>" + "文件类型：" + this.FileUpload1.PostedFile.ContentType;

}

catch

{

this.Label1.Text = "文件上传不成功！";

}

}

else

{

this.Label1.Text ="只能够上传后缀为.gif,.jpg,.bmp,.png 的文件夹";

}

}

}

### 应用锦囊

#### 1．获取文件的相关知识

string filePath = FileUpload1.PostedFile.FileName;//获取上传文件的路径

string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);//获取文件名称

string fileSize = Convert.ToString(FileUpload1.PostedFile.ContentLength);//获取文件大小

string fileExtend = filePath.Substring(filePath.LastIndexOf(".")+1);//获取文件扩展名

string fileType = FileUpload1.PostedFile.ContentType;//获取文件类型

string serverPath = Server.MapPath("指定文件夹名称") + fileName;//保存到服务器的路径

FileUpload1.PostedFile.SaveAs(serverPath);//确定上传文件

#### 2．生成图片的缩略图

在上传图片时，可以将图片先进行缩放，然后将其保存到服务器中，其主要代码如下：

string filePath = FileUpload1.PostedFile.FileName;//获取上传文件的路径

//生成缩略图

System.Drawing.Image image, newimage;

image = System.Drawing.Image.FromFile(filePath);

System.Drawing.Image.GetThumbnailImageAbort callb=null;

newimage = image.GetThumbnailImage(67, 90, callb, new System.IntPtr());

//把缩略图保存到指定的虚拟路径

newimage.Save(serverpath);

//释放 image 对象占用的资源

newimage.Dispose();

image.Dispose();