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/”表示图片类型。