Asp.Net Mvc Foto Upload

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    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?


    :)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    undefined-01
    undefined-01's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    hocam veritabaninda tutma. ne olucakki diyordum proje buyudukce cok gicik bir hal almaya basladi. acayip yavasliyor bir sure sonra.


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    sahinka
    sahinka's avatar
    Kayıt Tarihi: 04/Mayıs/2012
    Erkek

    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 


    imza
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaviGozluDev
    MaviGozluDev's avatar
    Kayıt Tarihi: 05/Eylül/2005
    Erkek

    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.


    .
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

     

    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. 

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    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?


    lrny.app
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    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


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    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

    :)
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek

    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
Toplam Hit: 1196 Toplam Mesaj: 9
asp.net mvc performans foto upload