2017-03-11 5 views
5

Ich arbeite an einem kleinen Blog mit ASP.NET Core (MVC 6) EF Visual Studio. Ich habe Probleme beim Finden von Bildern in einer Datenbank. Ich habe über IFormfile gelesen, aber ich verstehe nicht wirklich, wie ich vorgehen soll, ich stecke fest. Ich bin neu dazu und würde gerne ein wenig Hilfe haben.Wie speichert man Bilder in der Datenbank mit ASP.NET Core?

Ich möchte das Bild in dem Post speichern, den ich erstelle (in der gleichen Form). Ich möchte es daher zu postID speichern. Dann muss ich das Bild anzeigen können, wie mache ich das? Ich weiß, es gibt viel zu fragen, aber ich weiß nicht, wohin ich mich wenden soll. Fühlen Sie sich frei, Links zu senden, wenn Sie gute Tipps oder Ideen haben.

Vielen Dank im Voraus!

+0

Es ist keine gute Idee, Dateien in der Datenbank zu speichern, Ihre Datenbank kann schnell sehr groß werden, was die Sicherung und Wiederherstellung problematisch macht. –

Antwort

0

Sie können IFormFile verwenden, um aus der Ansicht gepostete Bilder zu speichern. Unten ist der Beispielcode.

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

Im Hinblick einfach binden Sie es mit IFormFile Eigenschaft wie:

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

In Ihrem Controller müssen Sie nur wie Datei auf dem Server speichern:

var filename = ContentDispositionHeaderValue 
            .Parse(user.UploadedImage.ContentDisposition) 
            .FileName 
            .Trim('"'); 
        filename = Path.Combine(webRoot, "/Content/UserProfile/", [email protected]"\{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; 
2

Sie diesen Kommentar hilfreich, wenn Sie müssen in der Datenbank speichern. Dies war eine Modifikation von https://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files und viel Input von k7Boys beantworten hier MVC 6 HttpPostedFileBase?

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

Blog Modal Klasse sollte Img Feld wie haben;

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

Steuerung;

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"); 
     } 

Ich brauchte ein paar Stunden, um hierher zu kommen. Ich arbeite jetzt daran, die Bilder in einer Ansicht zu betrachten. Ich bin mir sicher, dass dies nicht kompliziert sein wird. Enjoy

Verwandte Themen