我是asp.net的初学者,并试图在我的项目Images文件夹中上传图像,但它没有上传到所需的文件夹中。有人请给我建议。
Create.cshtml
@using (Html.BeginForm("Create", "Lenses", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>lens</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.lens_img, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" name="file" id="file" style="width: 100%;" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
Controller.cs
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "lens_img")] lens lens, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
if (file != null)
{
file.SaveAs(HttpContext.Server.MapPath("~/Content/Images/")
+ file.FileName);
lens.lens_img = file.FileName;
}
db.lenses.Add(lens);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(lens);
}
答案 0 :(得分:2)
如果文件到达控制器操作且file
参数不为空,那么您应该使用Path.Combine
方法生成正确的路径,不要为此使用字符串连接,您应该尝试以下方式:
file.SaveAs(Path.Combine(HttpContext.Server.MapPath("~/Content/Images/"), file.FileName);
为了更加清晰,让我们分两步:
var mappedPath = HttpContext.Server.MapPath("~/Content/Images/");
file.SaveAs(Path.Combine(mappedPath, file.FileName);
同时查看this answer也是相关的。
希望它有所帮助!