我在ASP.NET MVC 6中上传文件/图片时遇到了麻烦。大多数教程似乎已经过时,即使一些新的教程也提到了一些不合理的东西。
在我的视图中:
<div class="form-group">
@using (Html.BeginForm("Create", "PostNin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<label asp-for="NinImageString" class="control-label"></label>
<input type="file" name="files" class="form-control" />
}
@*<input asp-for="NinImageString" class="form-control" />
<span asp-validation-for="NinImageString" class="text-danger"></span>*@
</div>
<div class="form-group">
<label asp-for="NinImageCaption" class="control-label"></label>
<input asp-for="NinImageCaption" class="form-control" />
<span asp-validation-for="NinImageCaption" class="text-danger"></span>
</div>
然后在我的控制器中:
// GET: PostNins/Create
public IActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,NinFk,NinDigit,NinImageString,NinImageCaption,NinNote")] PostNin postNin, IFormFile files)
{
// need code here
if (ModelState.IsValid)
{
_context.Add(postNin);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(postNin);
}
我理解需要使用IFormFile
来实现。
我想上传一张带标题的图片,并将其存储到应用程序文件夹NinImages
中,以便稍后访问。 我想我也有关于它的问题,但这是另一个问题。
我的理解是,必须以某种方式将图像副本保存到目录系统中,在wwwroot下保存文件路径作为字符串到数据库中。
解决方案:
我的新控制器如下所示。请注意,fileTime仅用于为每个上传分配唯一值,以避免重复。 在这种情况下,这有效,因为只能上传一个文件。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,NinFk,NinDigit,NinImageString,NinImageCaption,NinNote")] PostNin postNin, IFormFile uploadFile)
{
if (uploadFile != null && uploadFile.Length > 0)
{
var fileTime = DateTime.UtcNow.ToString("yyMMddHHmmss");
var fileName = fileTime + Path.GetFileName(uploadFile.FileName);
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/NinFileUploads", fileName);
postNin.NinImageString = filePath;
_context.PostNins.Add(postNin);
_context.SaveChanges();
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await uploadFile.CopyToAsync(fileStream);
}
//if (ModelState.IsValid)
//{
// _context.Add(postNin);
// await _context.SaveChangesAsync();
// return RedirectToAction(nameof(Index));
//}
return RedirectToAction(nameof(Index));
}
return View(postNin);
enctype =“multipart/form-date”
是错误的,它应该是“multipart/form-data”。 - Jasen