Asp.Net Mvc Foto Upload
-
Bu işlemi siz nasıl gerçekleştiriyorsunuz? Veritabanına bytearray olarak mı kaydediyorsunuz yoksa bi resimler klasörüne mi kaydediyorsunuz?
Ben veritabanına kaydetmeyi seçmiş durumdayım ama hangisi daha performanslı?
Hani hangisi daha performanslı derken şöyle soruyorum aslında:
Tabloda 1000 tane resim bytearray olarak tutuluyor, sadece 10 tanesini alıp sayfada gösteriyorum.
Hem veritabanı performansı olarak geneli nasıl etkiler, hem de sayfanın yüklenme süresini nasıl etkiler?
-
hocam veritabaninda tutma. ne olucakki diyordum proje buyudukce cok gicik bir hal almaya basladi. acayip yavasliyor bir sure sonra.
-
Ben dosya yolunu tutuyorum
1000 resimi veri tabanından çekip kullanıcıya gösterirken senin sunucu ve sql serverin önemliylen
1000 resimi dosya yolundan çekip basarsan kullanıcının internet hızı önemli olacaktır
-
ufak bir proje olacaksa veritabanına kaydedilebilir, kontrolü daha kolay oluyor gibi.
Ama proje büyüyecekse, kullanıcılar bu fotoğrafları çok sık görüntüleyecekse veritabanına fotoyu yazmaktan ziyade yolunu yazmak daha iyi bence.
Benzer bir şeye veritabanına yazarak başladık fotoları, şu an iyi sayılabilecek bir kullanım yakaladı proje. 16 ram olan bi sunucu da yayınladığımız site ara ara 7gb yiyor. On binlerce kullanıcı olsa eyvallahta öyle bir kullanımda yok.
Şimdi oturup değiştirelim, yollarını saklayalım fotoğrafları saklamaktansa diyoruz ama kim girişecek ona vakit darlığından kaldı öyle. -
selam hocam,
ben kendimce testler yaptım.. resimleri base64 e çevirip attım, byte array olarak attım ve direk dosyayı hosta upload ettim. En performanslısı son bahsettiğim dosya olarak upload etme ve yolunu db de tutma..
Ancak buradaki başka önemli faktör de stream olarak upload/download yapabilmen.
Bilmiyorum web sitenin arkasında ne kullanıyorsun ama ben aynı zamanda bir web servis yazdım, bu web servisin download ve upload metodları var, stream olarak iş yapıyor. Bu sayede diğer yollardan daha çabuk getiriyor/götürüyor.
Kullanıcıya verirken de stream olarak verirsin..
Eğer resimler büyükse, upload ettirmeden önce kaliteyi bozmadan resize ettirebilirsin. Eğer orjinalliği bozulmasını istemiyorsan çeşitli sıkıştırma metodları ile resmi sıkıştırıp gönderebilirsin.
-
Aynı konuyu bu aralar bende araştırıyorum.Unbalanced hocam bu stream olarak download yaptırmayı hangi durumda kullanıyoruz eğer resim veritabanına byte dizisi yada base64 olarak kayıtlı isemi? Yoksa resmi fiziksel olarak klasörde saklasam dosya yolunuda sayfaya atsam bu durumda stream falan gerekmiyor değil mi?
-
hocam veritabanina bir sey saklama bu sekilde, sadece pathi yazdir..
diger turlu db yi gereksiz yere sisirmis olursun..
download olayi icin, ilgili path deki dosyayi byte array e cevirip yollayabilirsin.. google da ornekleri olmasi lazim
-
Hannibal_King bunu yazdı
Aynı konuyu bu aralar bende araştırıyorum.Unbalanced hocam bu stream olarak download yaptırmayı hangi durumda kullanıyoruz eğer resim veritabanına byte dizisi yada base64 olarak kayıtlı isemi? Yoksa resmi fiziksel olarak klasörde saklasam dosya yolunuda sayfaya atsam bu durumda stream falan gerekmiyor değil mi?
Örnek kod vereyim:
if (upload != null && upload.ContentLength > 0) { string pic = System.IO.Path.GetFileName(upload.FileName); string path = System.IO.Path.Combine(Server.MapPath("~/Resimler"), pic); WebImage img = new WebImage(upload.InputStream); img.Resize(int Genislik, int Yukseklik, false); img.Save(path); entityDgs.Foto = pic; }Streami alıp resme çevirip boyutlandırıp Resimler klasörüne atıyor, tabloda sadece resmin adı ve idsi tutuluyor. Sayfada gösterirken de img tagının src'si şöyle tanımlanıyor
@Url.Content("~/Resimler/" + System.IO.Path.GetFileName(item.Foto))
+++ Ayrıca tüm cevaplar için teşekkür ederim :)
wasd tarafından 27/Oca/16 16:44 tarihinde düzenlenmiştir -
tam olarak sorunuzun karşılığı değil ama belirtmek isterim ki resim gibi statik dosyalar için CDN (Content Delivery Network) kullanmak oldukça avantajlı.
Örneğin AWS CloudFront kullanacaksanız, veritabanında URL olarak "http://d3rksdscu72ivr.cloudfront.net/" gibi bir ön-isim (bütün dosyalarınız için sabit) ve daha sonra CDN'i tanımladığınız S3 bucket'indeki dosyanın konumunu içercek ("../dosyalarim/resim1.jpg") şekilde bir yer kaplar. AWS 'nin Dünya'nın tüm stratejik bölgelerinde bulunan dağıtık sunucuları tarafından ön-belleğe alınan dosyalarınız, çağırıldığı cografyaya göre en yakın sunucudan en hızlı şekilde kullanıcılara sunulur.
CDN'de css, js, statik html sayfaları, resimler, dokumanlar; yani tüm statik dosyalar tutulabilir.
CDN'deki dosya üzerinde değişiklik yaparsanız, dosyayı cache'den kaldırıp, tekrar cache'lenmesini sağlamalısınız. CDN'deki dosyaların belli bir "expiration" süresi oluyor (AWS de default olarak 24 saat). Bu süre içinde ana dosyada değişiklik yapsanız bile kullanıcılara önbellekteki dosya servis edilir, aklınızda olsun. Zor bir işlem değil.
Doğruluğu tartışılır ama aylık bandgenişliğinize göre CDN servislerinin fiyatları da şurada karşılaştırılmış: http://www.cdncalc.com/
sevgiler.
RockZs tarafından 27/Oca/16 13:36 tarihinde düzenlenmiştir
