2017-03-11 52 views
5

ASP.NET Çekirdeği (MVC 6) EF Visual Studio kullanarak küçük bir blog üzerinde çalışıyorum. Görüntüleri bir veritabanına nasıl kaydedeceğimi bulmakta zorlanıyorum. IFormfile hakkında birşeyler okudum ama bunun nasıl yapılacağını gerçekten anlamıyorum, sıkışıp kaldım. Ben buna yeniyim ve biraz yardım etmeyi çok isterim.ASP.NET Core kullanarak görüntüleri veritabanına nasıl kaydederim?

Resmi, oluşturduğum gönderiye kaydetmek istiyorum (Aynı formda). Bu nedenle, postID'ye kaydetmek istiyorum. O zaman görüntüyü gösterebilmem gerekiyor, bunu nasıl yaparım? Sorulacak çok şey olduğunu biliyorum, ama nereye döneceğimi bilmiyorum. İyi bir ipucunuz veya fikriniz varsa, bağlantılar göndermekten çekinmeyin.

Şimdiden teşekkürler!

+0

Dosyaları veritabanına kaydetmek iyi bir fikir değildir, veritabanınız çok hızlı olabilir, bu da yedeklemeyi ve sorun gidermenizi sağlar. –

cevap

0

Görüntüden kaydedilmiş görüntüyü kaydetmek için IFormFile'ı kullanabilirsiniz. Aşağıda örnek kod bulunmaktadır. Sen eğer bu yararlı bulabilirler

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

: Eğer gibi sunucudaki dosyayı kaydetmek gerekir denetleyicinizdeki olarak

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

: görünümünde

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

basitçe gibi IFormFile özelliğiyle bağlamak Veritabanına kaydetmelisin. Bu https://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files bir değişiklik oldu ve k7Boys girdi sürü MVC 6 HttpPostedFileBase?

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

Blog Modal Sınıf Img alan gibi olmalıdır burada cevap;

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

Denetleyici;

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

Buraya gelmek için birkaç saatimi aldım. Artık görüntüleri bir görünümde görüntülemeye çalışıyorum, bunun karmaşık olmayacağından eminim. Enjoy