20

我正在使用 ASP.NET Core(MVC 6) EF Visual Studio 编写一个小型博客。我很难找到如何将图像保存到数据库。我已经阅读过,IFormfile但我真的不明白如何去做,我被卡住了。我是新手,很想得到一点帮助。

我想将图像保存到我正在创建的帖子中(以相同的形式)。因此,我想将其保存到 postID。然后我需要能够显示图像,我该怎么做?

4

3 回答 3

15

如果您需要保存到数据库,您可能会发现这很有用。这是对https://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files的修改, k7Boys 的大量输入在这里回答MVC 6 HttpPostedFileBase?

<input type="file" name="Image" id="Imageinput">

博客模态类应该有 Img 字段,如;

    public int BlogId{ get; set; }
    ...
    public byte[] Img{ get; set; }

控制器;

    public async Task<IActionResult> Create([Bind("BlogId,...Img")] Blog blog t, IFormFile Image)
    if (ModelState.IsValid)
        {
            if (Image!= null)

            {
                if (Image.Length > 0)

                //Convert Image to byte and save to database

                {

                    byte[] p1 = null;
                    using (var fs1 = Image.OpenReadStream())
                    using (var ms1 = new MemoryStream())
                    {
                        fs1.CopyTo(ms1);
                        p1 = ms1.ToArray();
                    }
                    Blog.Img= p1;

                }
            }

            _context.Add(client);
            await _context.SaveChangesAsync();

            return RedirectToAction("Index");
        }

我花了几个小时才到这里。现在正在查看视图中的图像,我相信这不会很复杂。享受

于 2017-08-02T21:16:12.973 回答
8

试试这个它工作正常

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,PostMode,Message,Image,AccountId,Created,Status")] Post post, IFormFile Image)
{
    if (ModelState.IsValid)
    {
        using (var ms = new MemoryStream())
        {
             Image.CopyTo(ms);
             post.Image = ms.ToArray();
        }

        _context.Add(post);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(post);
}

显示图像

@foreach (var item in Model)
{
    <img class="img-responsive full-width" src="data:image/jpeg;base64,@Convert.ToBase64String(item.Image)" />
}
于 2018-11-01T19:32:00.727 回答
2

您可以使用 IFormFile 保存从视图中发布的图像。下面是示例代码。

public class UserProfileViewModel
    {
        public string UserName { get; set; }
        public IFormFile UploadedImage { get; set; }
        public string ImageUrl { get; set; }
    }

在视图中只需将其与 IFormFile 属性绑定,例如:

<img src="@Model.ImageUrl" alt="User Logo" asp-append-version="true" />
<input type="file" asp-for="UploadedImage" />

在您的控制器中,您只需将文件保存在服务器上,例如:

var filename = ContentDispositionHeaderValue
                                    .Parse(user.UploadedImage.ContentDisposition)
                                    .FileName
                                    .Trim('"');
                    filename = Path.Combine(webRoot, "/Content/UserProfile/", $@"\{filename}");
                    if (Directory.Exists(webRoot + "/Content/UserProfile/"))
                    {
                        using (FileStream fs = System.IO.File.Create(filename))
                        {
                            user.UploadedImage.CopyTo(fs);
                            fs.Flush();
                        }
                    }
model.ImageURL = "~/Content/Brands/" + user.UploadedImage.FileName;
于 2017-07-07T23:11:08.323 回答