在文件夹MVC中上传图像

时间:2017-07-06 09:41:49

标签: asp.net asp.net-mvc asp.net-mvc-4

我是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);
}

1 个答案:

答案 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也是相关的。

希望它有所帮助!