HttpPostedFileBase文件上传实例详解

1. HttpPostedFileBase的作用

在ASP.NET MVC中,可以使用HttpPostedFileBase类来实现文件上传功能。

2. HttpPostedFileBase的使用方法

2.1. HTML表单

首先,在HTML表单中添加一个文件上传控件:

<form method="post" enctype="multipart/form-data">

<input type="file" name="file" />

<button type="submit">上传</button>

</form>

需要注意的是,enctype属性必须设置为multipart/form-data,否则文件上传功能将无法正常使用。

文件上传控件的name属性用于在服务器端获取上传的文件。

2.2. MVC控制器

在MVC控制器中,使用HttpPostedFileBase类来获取上传的文件:

[HttpPost]

public ActionResult Upload(HttpPostedFileBase file)

{

if (file != null && file.ContentLength > 0)

{

var fileName = Path.GetFileName(file.FileName);

var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);

file.SaveAs(path);

}

return RedirectToAction("Index", "Home");

}

在上述代码中,file参数就是上传文件的对象。可以通过FileName属性来获取文件名,通过ContentLength属性来获取文件大小,通过SaveAs方法来保存文件。

2.3. 限制文件大小和类型

可以通过代码来对上传的文件进行限制,例如只允许上传100KB以内的图片:

[HttpPost]

public ActionResult Upload(HttpPostedFileBase file)

{

if (file != null && file.ContentLength > 0)

{

if (file.ContentLength > 100 * 1024)

{

ModelState.AddModelError("file", "文件大小不能超过100KB");

// 返回错误信息到前端

return View();

}

if (!file.ContentType.StartsWith("image/"))

{

ModelState.AddModelError("file", "请上传图片文件");

// 返回错误信息到前端

return View();

}

var fileName = Path.GetFileName(file.FileName);

var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);

file.SaveAs(path);

}

return RedirectToAction("Index", "Home");

}

通过ContentLength属性来判断文件大小是否符合要求,通过ContentType属性来判断文件类型是否为图片类型。需要注意的是,ContentType属性返回的字符串以文件类型开头,例如“image/”表示图片类型。

后端开发标签