首先将图像上传到文件夹 mvc 5 代码

本文关键字:文件夹 mvc 代码 图像 | 更新日期: 2023-09-27 18:35:09

我在最后一步上挣扎了很长时间,将图像上传到文件夹。我已经做到了没有保存数据库路径。我希望现在和现在图像信息和图像路径都保存到db中,但图像本身不会出现在IMage文件夹中。我在索引和创建视图之间跳转。提前感谢各种帮助,对不起我的英语。/

Create.cshtml

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <h2>@ViewBag.Message</h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
    <p>
        @using (Html.BeginForm("Create", "Imagefiles", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {
            @Html.LabelFor(model => model.BildInfo, htmlAttributes: new { @class = "control-label col-md-2" })
            @Html.EditorFor(model => model.BildInfo, new { htmlAttributes = new { @class = "form-control" } })
            <label for="file">Upload Image:</label>
            <input type="file" name="file" id="file" />
            <input type="submit" value="Upload Image" />
        }
    </p>

}

INDEX.cshtml

@model IEnumerable<Upload.Models.Imagefiles>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.file)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.BildInfo)
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.file)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BildInfo)
        </td>
        <td><img src="~/Images/@item.file" width="100" height="100" /></td>

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.FilID }) |
            @Html.ActionLink("Details", "Details", new { id=item.FilID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.FilID })
        </td>
    </tr>
}
</table>

图像文件控制器

.CS
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "FilID,file,BildInfo")] Imagefiles imagefiles, HttpPostedFileBase imagesfiles)
        {
            if (ModelState.IsValid)
            {
                db.Imagefiles.Add(imagefiles);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            var path = Path.Combine(Server.MapPath("~/Content/Files/"), imagesfiles.FileName);
            var data = new byte[imagesfiles.ContentLength];
            imagesfiles.InputStream.Read(data, 0, imagesfiles.ContentLength);
            using (var sw = new FileStream(path, FileMode.Create))
            {
                sw.Write(data, 0, data.Length);
            }
            return RedirectToAction("Index");

首先将图像上传到文件夹 mvc 5 代码

if (ModelState.IsValid)
        {
            db.Imagefiles.Add(imagefiles);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

我认为返回 RedirectToAction("索引"); 在上面的代码中,在到达文件持久性逻辑之前退出执行。

在 if 块中返回 RedirectToAction("Index");该行之前移动文件持久性逻辑。

你的最终代码变成这样的东西。

 [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create([Bind(Include = "FilID,file,BildInfo")] Imagefiles imagefiles, HttpPostedFileBase imagesfiles)
            {
                if (ModelState.IsValid)
                {
                    db.Imagefiles.Add(imagefiles);
                    db.SaveChanges();
                    var path = Path.Combine(Server.MapPath("~/Content/Files/"), imagesfiles.FileName);
                    var data = new byte[imagesfiles.ContentLength];
                    imagesfiles.InputStream.Read(data, 0, imagesfiles.ContentLength);
                    using (var sw = new FileStream(path, FileMode.Create))
                    {
                       sw.Write(data, 0, data.Length);
                     }
                    return RedirectToAction("Index");
                }
                else
                {
                  //Message to the user
                }
           }
如果在

应用MrGenius分辨率后仍然无法保存,请尝试以下代码"在行返回RedirectToAction("Index")之前"。

使用

imagesFile.SaveAs(path) 而不是使用 FileStream (.SaveAs 更适合于文件保存到磁盘)。Code imagesFile.SaveAs(path) 会将物理文件保存到直接从 HttpPostedFileBase 指定的路径,并且您仍然将路径保存到 Database.Your FileStream 类 sw。写入函数可能是这里的罪魁祸首。我尝试使用sw编写文件。写了,什么都没有保存。FileStream可用于将图像文件保存到数据库。

//Direct file save to the path
var fileName = Path.GetFileName(imagesfiles.FileName);
var path = Path.Combine(Server.MapPath("~/Content/Files/"), fileName);
imagesfiles.SaveAs(path);