【问题标题】:How to upload an image into a data base and display it back to the view ASP.NET Core MVC如何将图像上传到数据库并将其显示回视图 ASP.NET Core MVC
【发布时间】:2020-01-29 06:59:43
【问题描述】:

数据类 EF 核心 `

 public class Manga
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime? DateCreated { get; set; }
        public DateTime? Updated { get; set; }
        public byte[] Image { get; set; }
        //Manga can have many chapters
        public ICollection<Chapter> Chapters { get; set; }
    }
    public class Chapter
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime? DateCreated { get; set; }
        public DateTime? Updated { get; set; }
        public byte[] Image { get; set; }
        //Chapter can only have manga
        public Manga Manga { get; set; }
        //The chapter connected to the manga
        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);
}

查看:

<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>

【问题讨论】:

    标签: c# asp.net-core-mvc image-upload


    【解决方案1】:

    您应该提供更多详细信息,例如 Manga struct 。但是有两件事你应该首先注意。首先,为了支持文件上传,HTML 表单必须指定 enctypemultipart/form-data 。第二件事是您应该将_context.Add(manga) 移动到foreach 文件循环中,循环文件,读取到流,保存到Manga 类,添加/跟踪到上下文中,最后调用context.SaveChangesAsync() 保存到外部数据库中循环的。

    【讨论】:

    • 您好,非常感谢您的回复,对于迟到的回复我深表歉意。我已经添加了您要求的数据上下文类。此外,如果您可以提供更多信息,说明什么是完成我想要完成的任务的最佳方式。我非常没有经验,所以如果你能提供尽可能多的步骤和细节。
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2016-07-26
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多