• 03-12-2020, 01:44:29
    #1
    Başlıkta belirttiğim gibi, ajax ile file-input değerini alıp controller'a göndermek istiyorum. Ama kaydet düğmesine tıkladığımda dosyanın tam yolunu almıyor daha doğrusu yanlış alıyor.
    Normalde "D/1.jpg" olması gerekiyorken, dosya yolu "/fakepath/1.jpg" şeklinde gözüküyor.
    (FormDatayı oluşturarak, dosyayı controller'a göndererek kaydedebiliyorum ama istediğim dosyayı klasöre kaydetmek değil, veritabanına kaydetmek.)
    Resmi veritabanına kaydetmek için tam yolu almam gerekiyor.
    Bunu nasıl çözerim?
  • 03-12-2020, 01:49:42
    #2
    hocam kod satırını atarmısın ? yapman gereken aslında şu resim klasöre kayıt oluyor o yolu sql serverda tutucaksın sonra img src içine işte mesela "/resim/ (data gelen ver isql den) yani şöyle img1.png" örnek olarakta altta veriyorum


      
    @foreach (var item in Model)                    
    {                        <div class="col-lg-4 col-md-6 mb-4 project-entry">
                            <img src="~/Tema/images/@Html.DisplayFor(modelItem => item.ResimYolu)" alt="Image" class="img-fluid">         
                       </a>                            <h3 class="mb-0"><a href="~/Tema/#"> @Html.DisplayFor(modelItem => item.ResimAd)</a>
    </h3>         
                       <span class="text-muted"> @Html.DisplayFor(modelItem => item.ResimAciklama)</span>
                            </div>                    }
    Belki işini görür hocam.
  • 03-12-2020, 01:50:54
    #3
    Birde kodları atarsan yardımcı olabilirim
  • 03-12-2020, 02:02:18
    #4
    NuhYilmaz adlı üyeden alıntı: mesajı görüntüle
    Birde kodları atarsan yardımcı olabilirim
    Basitçe kodları atayım hocam. Burada value değerini alıyorum ama bana dosya yolunu vermiyor. Birçok siteyi inceledim ama dosya yolunu alamazsın tarayıcılar güvenlik açısından izin vermiyor şeklinde yorum yapmışlar. Peki bu şekilde alamıyorsak farklı bir yöntemi var mıdır?

    Html
    <input type="file" id="fotoEkle">
    <button id="kaydet " type="button" class="btn btn-style">Kaydet</button>

    Js
    $("#kaydet").click(function (){
    var filePath = $("#fotoEkle").val();
    //....
    }});
  • 03-12-2020, 02:02:03
    #5
    ibrahimcakal adlı üyeden alıntı: mesajı görüntüle
    Basitçe kodları atayım hocam. Burada value değerini alıyorum ama bana dosya yolunu vermiyor. Birçok siteyi inceledim ama dosya yolunu alamazsın tarayıcılar güvenlik açısından izin vermiyor şeklinde yorum yapmışlar. Peki bu şekilde alamıyorsak farklı bir yöntemi var mıdır?

    Html
    <input type="file" id="fotoEkle">
    <button id="kaydet " type="button" class="btn btn-style">Kaydet</button>

    Js
    $("#kaydet").click(function (){
    var filePath = $("#fotoEkle").val();
    //....
    }});
    hocam tam yapmak sitedin olay nedir resim yükleyip yayınlamak mı sitede ?
  • 03-12-2020, 02:03:53
    #6
    NuhYilmaz adlı üyeden alıntı: mesajı görüntüle
    hocam tam yapmak sitedin olay nedir resim yükleyip yayınlamak mı sitede ?
    İstediğim arayüzden eklediğim dosyanın tam yolunu alıp, ajax ile controller'a göndermek.
    Controller'da aldığım dosyanın tam yolunu, filestream ile okuyup byte[]'a çevirip veritabanına kaydetmek.
  • 03-12-2020, 02:05:30
    #7
    Temel olarak web yazılımlarını Client ve Server olmak üzere 2 farklı şekilde değerlendirmek gerekir. Burada her ne kadar siteyi/sistemi biz yazıyor, hatta kendimiz kullanıyor bile olsak; Gecko tabanlı (Chrome, FireFox, Edge) tarayıcılar son kullanıcıyı da düşünür, ve bilgisayarlarındaki klasör yapısının dışarı aktarılmasını veya bilgisayarındaki dosyalara direk erişimine izin vermezler. Bu yüzden dosyayı seçtiğinizde FakePath şeklinde bir dosya yolu görürsünüz.

    Resim, video ve müzik gibi dosyaları kesinlikle veritabanında saklamanızı önermem. Adı üzerinde veri tabanı; dosya sistemi değil. Tavsiyem herkesin yaptığı gibi, dosyayı sunucuda bir yere kaydedin, kaydettiğiniz yerin adresini veritabanında saklayın.

    İlla ki dosyaları veritabanında saklamak istiyorsanız, longtext türünde bir sütun açın, sunucuya gönderilen dosyayı da base64'e çevirerek veri tabanında saklayın. Tekrar okuduğunuzda ise base64'ten tekrar decode ederek baytları alın. Böylelikle herhangi bir karakter bozulması sorunuyla karşılaşmamış olursunuz.
  • 03-12-2020, 02:05:51
    #8
    ibrahimcakal adlı üyeden alıntı: mesajı görüntüle
    İstediğim arayüzden eklediğim dosyanın tam yolunu alıp, ajax ile controller'a göndermek.
    Controller'da aldığım dosyanın tam yolunu, filestream ile okuyup byte[]'a çevirip veritabanına kaydetmek.
    illa ajax mi olucak hocam ajax ise yarın şirkette bakar konuya dönerim
  • 03-12-2020, 02:08:09
    #9
    NuhYilmaz adlı üyeden alıntı: mesajı görüntüle
    illa ajax mi olucak hocam ajax ise yarın şirkette bakar konuya dönerim
    Hocam siz 2 türlü de nasıl yapıldığını gönderebilirseniz çok makbule geçer. Normalde dosyaları genelde klasörde tutuyordum, veritabanına ilk defa kaydetme işlemi yapacağım için biraz takıldım. (Öncelik ajax hocam, çünkü tüm işlemleri ajax ile yaptım, bir tanesi farklı oldumu için rahat etmiyor. )
    Şimdiden teşekkürler.