C# 如何将图像上载到数据库并显示回视图ASP.NET Core MVC

C# 如何将图像上载到数据库并显示回视图ASP.NET Core MVC,c#,asp.net-core-mvc,image-upload,C#,Asp.net Core Mvc,Image Upload,数据类EF核心 ` 公共类漫画 { 公共int Id{get;set;} 公共字符串名称{get;set;} 公共字符串说明{get;set;} 公共日期时间?DateCreated{get;set;} 公共日期时间?已更新{get;set;} 公共字节[]映像{get;set;} //漫画可以有很多章节 公共ICollection章{get;set;} } 公共课章节 { 公共int Id{get;set;} 公共字符串名称{get;set;} 公共字符串说明{get;set;} 公共日期时间

数据类EF核心 `

公共类漫画
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共日期时间?DateCreated{get;set;}
公共日期时间?已更新{get;set;}
公共字节[]映像{get;set;}
//漫画可以有很多章节
公共ICollection章{get;set;}
}
公共课章节
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共日期时间?DateCreated{get;set;}
公共日期时间?已更新{get;set;}
公共字节[]映像{get;set;}
//章节只能有漫画
公共漫画{get;set;}
//这一章与漫画有关
public int MangaId{get;set;}
}
`我正在努力学习如何上传图像和文件。正确的形象是优先考虑的。我想允许用户上传图片并公开使用。我使用的是二进制数组方法。这是个坏主意吗?如果这是不可能的,还有什么更好呢

在处理此问题时,我遇到一个模型错误:

值“narutotest.jpg”对图像无效

我的代码:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Description,Image")] Manga manga, List<IFormFile> Image)
{
    if (ModelState.IsValid)
    {
        foreach (var item in Image)
        {
            if(item.Length > 0)
            {
                using (var stream = new MemoryStream())
                {
                    await item.CopyToAsync(stream);
                    manga.Image = stream.ToArray();
                }
            }
        }

        manga.DateCreated = DateTime.Now;
        manga.Updated = DateTime.Now;
        _context.Add(manga);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(manga);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“Id,Name,Description,Image”)]Manga Manga,List Image)
{
if(ModelState.IsValid)
{
foreach(图像中的变量项)
{
如果(item.Length>0)
{
使用(var stream=new MemoryStream())
{
等待项。CopyToAsync(流);
manga.Image=stream.ToArray();
}
}
}
manga.DateCreated=DateTime.Now;
manga.Updated=DateTime.Now;
_添加(漫画);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
返回视图(漫画);
}
视图:



您应该提供更多详细信息,如
漫画
结构。但是有两件事你应该首先注意。首先,为了支持文件上传,HTML表单必须指定
多部分/表单数据的
enctype
。第二件事是你应该移动
\u context.Add(manga)
foreach
文件循环中,循环文件,读取到流,保存到
manga
类,添加/跟踪到context,最后调用
context.savechangesync()
保存到循环外的数据库中。

您好,非常感谢您的回复,我为回复晚表示歉意。我已经添加了您要求的datacontext类。此外,如果你能提供更多的信息,什么是最好的方式来完成我试图实现的任务。我非常没有经验,所以如果你能给出尽可能多的步骤和细节。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Description,Image")] Manga manga, List<IFormFile> Image)
{
    if (ModelState.IsValid)
    {
        foreach (var item in Image)
        {
            if(item.Length > 0)
            {
                using (var stream = new MemoryStream())
                {
                    await item.CopyToAsync(stream);
                    manga.Image = stream.ToArray();
                }
            }
        }

        manga.DateCreated = DateTime.Now;
        manga.Updated = DateTime.Now;
        _context.Add(manga);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(manga);
}
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Description" class="control-label"></label>
                <input asp-for="Description" class="form-control" />
                <span asp-validation-for="Description" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Image" class="control-label"></label>
                <input asp-for="Image" type="file" id="files" />
                <span asp-validation-for="Image" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>