首先将图像上传到文件夹 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");
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);