如何解决在 Asp.Net core 中上传图片失败
我正在尝试上传单个图像。但问题是当我上传图像时,我发现 null (我调试了)。 这是我的代码:
[HttpPost]
public async Task <IActionResult> Create(Image products,IFormFile image)
{
if (ModelState.IsValid)
{
if (image != null)
{
var name1 = Path.Combine(_he.WebrootPath + "/Images",Path.GetFileName(image.FileName));
var stream2 = new FileStream(name1,FileMode.Create);
await image.copyToAsync(stream2);
products.ImageC = "Images/" + image.FileName;
}
if (image == null)
{
products.ImageC = "Images/NoImageFound.jpg";
}
_db.Images.Add(products);
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View(products);
}
_Create.cshtml
<form asp-action="Create" method="post" enctype="multipart/form-data">
<div class="p-4 rounded border">
<div asp-validation-summary="ModelOnly" class="text-danger">
</div>
<div class="form-group row">
<div class="col-5">
<p class="text-bold mb-2">Image</p>
<input asp-for="ImageC" class="" type="file" />
</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-danger form-control" value="Submit" />
</div>
</div>
</form>
//Image.cs (Model)
public class Image
{
public int Id { get; set; }
public string ImageC { get; set; }
}
当我输入提交按钮时:-
然后我调试了我的代码并发现了这个问题:-
我不明白为什么我发现这个空引用?我将如何上传我的图片?我还是初学者,请帮忙。
解决方法
我假设在 HttpGet 操作中传递给视图的模型是 Image 类的空实例,这就是 HttpPost 操作返回的模型。
因此,我们可以简单地在类本身中声明一个 IFormFile 属性,并让引擎使用来自 type="file" 控件的数据填充该属性。
此时,HttpPost Create 方法中不需要 IFormFile 类型的参数。
public class Image
{
public int Id { get; set; }
public IFormFile ImageC { get; set; }
}
那么 HttpPost Create 方法中所需的所有其他更改都是此更改的结果。
但是,您的视图和数据库似乎具有相同的模型。在这种简单的情况下,您可以继续并忘记 ViewModels 的概念,但最好是为了您将来的工作考虑模型和视图模型之间的这种分离。 UI 应该对用于与数据库交互的模型一无所知。
可以在此处找到有关此主题的更多信息 ASP.NET MVC Model vs ViewModel
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。