Nedir Cloudinary? projelerinizde resim video belki ses dosyaları gibi media dosyalarını kullanmanız hatta veritabanınızda depolamanız gerekebilir. Veritabanında (sql server) file stream ile aldıgınızda resim dosyalarınızı byte turune cevirir ve bu sekilde tutar. resmi kullanmak için çağırdığınızda yine bir suru işlemden geçerek resim olarak elinize gecer. Bu surec bir cok acıdan maliyet ve veritabanınızın bir süre sonra boyut olarak artması ve hantallaşması demektir.
İşte tam bu noktada cloudinary derdimize derman olabilir. free olarak belli bir boyuta izin veriyor. örneğin 4 binlik bir resim üzerinden deneme yaptığımda ücretsiz kısmı hiç sorun cıkarmadı. öncelikle sisteme üye olmanız gerekiyor. daha sonra mail adresinize gelen doğrulama kodu ile doğrulayın yoksa çalışmıyor.
link: https://cloudinary.com
Bu siteye üye olduktan sonra gelen, her hesabın kendisine ait id secret bilgileri vardır. Cloudinary hesabınıza girdiğinizde Account Details kısmında yer alır. Bu secret keyleri projemize vermemiz gerekiyor.
İlk öncelikle Cloudinary Kütüphanesini Nuget Manage ile indirelim. Kütüphane: CloudinaryDotNet
Projemizin appsetting dosyasına Cloudinary hesabınıza bağlı secret key değerlerini girmemiz gerekiyor.
"Cloudinary": {
"CloudName": "xxxxxxx",
"APIKey": "xxxxxxx",
"APISecret": "xxxxxxxxxx"
}
Siz kendi hesabınıza ait değerleri giriniz..
Model katmanında User modeline resim dosyasının geçiçi tutabileceğimiz Image adında yeni bir Property açalım.
[DataType(DataType.Upload)]
public IFormFile Image { get; set; }
MAP Katmanında UserConfiguration class'ına aşağıdaki komutu ekleyelim.
builder.Ignore("Image");
UI Katmanındaki View klasörü altındaki SignUp görünümündeki image inputun asp-for değerini eklediğimiz bu Image propertysine bağlayalım.
<div class="col-md-12">
<label> <b>Profil Resminiz</b></label>
<input type="file" asp-for="@Model.Image">
</div>
UI katmanındaki Helper klasörüne Cloudinary.cs class açalım ve daha önce yazdığım bu kodları buraya aktaralım.
public class CloudinaryImage
{
IConfiguration _configuration;
[System.Obsolete]
private IHostingEnvironment _environment;
[System.Obsolete]
public CloudinaryImage(IConfiguration configuration, IHostingEnvironment environment)
{
_configuration = configuration;
_environment = environment;
}
[System.Obsolete]
public string LocalUpload(IFormFile profilImage)
{
List<string> ClooudinaryUrlList = new List<string>();
string path = Path.Combine(_environment.WebRootPath, "Uploads");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string fileName = Path.GetFileName(profilImage.FileName);
FileStream stream = new FileStream(Path.Combine(path, fileName), FileMode.Create);
using (stream)
{
profilImage.CopyTo(stream);
}
WebRequest aa = System.Net.WebRequest.Create(stream.Name);
string ClodinaryPath = CloudinaryUploadImage(aa.RequestUri.AbsolutePath);
RemoveLocalFile(aa.RequestUri.AbsolutePath);
return ClodinaryPath;
}
public void RemoveLocalFile(string FilePath)
{
FileInfo fi = new FileInfo(FilePath);
fi.Delete();
}
public string CloudinaryUploadImage(string filename)
{
Account account = new Account(_configuration["Cloudinary:CloudName"], _configuration["Cloudinary:APIKey"], _configuration["Cloudinary:APISecret"]);
Cloudinary cloudinary = new Cloudinary(account);
var uploadParams = new ImageUploadParams()
{
File = new FileDescription(filename)
};
var uploadResult = cloudinary.Upload(uploadParams);
return uploadResult.SecureUrl.AbsoluteUri;
}
public string CloudinaryDestroyImage(string filename)
{
Account account = new Account(_configuration["Cloudinary:CloudName"], _configuration["Cloudinary:APIKey"], _configuration["Cloudinary:APISecret"]);
Cloudinary cloudinary = new Cloudinary(account);
string[] urlArray = filename.Split('/');
string sonadim = urlArray[urlArray.Length - 1];
string sonyrl = sonadim.Substring(0, sonadim.IndexOf("."));
var deletionParams = new DeletionParams(sonyrl);
var deletionResult = cloudinary.Destroy(deletionParams);
return deletionResult.Result;
}
}
UI Katmanındaki UserController constroctorda IHostingEnvironment ve IConfiguration sınıfını implement edelim.
IUserRepository _repoUser;
IConfiguration _configuration;
[System.Obsolete]
private IHostingEnvironment Environment;
[System.Obsolete]
public UserController(IUserRepository repoUser, IConfiguration configuration, IHostingEnvironment environment)
{
_repoUser = repoUser;
_configuration = configuration;
Environment = environment;
}
UI Katmanındaki UserController içerisindeki SignUp POST actionunu aşağıdaki şekilde güncelleyelim.
[System.Obsolete]
public IActionResult SignUp(User user)
{
//Yeni eklenen kullanıcının rolu modelden otomatik pompaci olarak kaydedilir. Sonrasında admin rol değişikliği yapabilir..
if (user.Password == user.RePassword)
{
user.Password = BCrypt.Net.BCrypt.HashPassword(user.Password);
if (user.Image != null)
{
CloudinaryImage cimage = new CloudinaryImage(_configuration, Environment);
user.ProfileImage = cimage.LocalUpload(user.Image);
}
_repoUser.Add(user);
TempData["CssClassName"] = "success";
TempData["Message"] = "Başarıyla üye oldunuz, Lütfen Giriş yapınız..";
return RedirectToAction("SignIn", "User");
}
else
{
ViewBag.CssClassName = "danger"; ;
ViewBag.Message = "Şifreler Birbiri ile uyumsuz, Lütfen Yeniden Deneyiniz..";
return View();
}
}
Şimdi yeniden üye olmayı deneyelim......
SQL Veritabanını kontrol ediyoruz..
Veritabanına eklenen resim url kopyalayıp tarayıcımızda açalım:
Üye omla işlemi de tamam, Bundan sonra admin Paneldeki işlemleri yapıp sonra arayüz tarafına geçecegiz...
Hiç yorum yok:
Yorum Gönder