Django Dosya Yükleme Bitip Bitmediğini Anlamak

BattOS

Hectopat
Katılım
21 Eylül 2019
Mesajlar
88
Daha fazla  
Cinsiyet
Erkek
Merhaba. Bir süredir Django ile ilgileniyorum ve yapamadığım bir şey var. Dosya yükleme yapılırken bitip bitmediğini anlayamıyorum. Bir dosyanın yüklendiğini ve submit edebileceğimi nereden anlarım.

Diyelim ki şöyle bir form var:
HTML:
<form class="form-signin" method="POST" enctype="multipart/form-data">
      {% csrf_token %}
   
      {% if form %}
        {{ form.media }}
        {{ form|crispy }}

        <label for="article_coverInput">Resim</label>
        <input type="file" id="article_coverInput" name="article_cover">

        <br>
        <button class="btn btn-lg btn-primary btn-block text-uppercase" type="submit">Makale Ekle</button>
      {% endif %}
   
  </form>


Formu bu şekilde yapmamın sebebi (yani dosyayı ayırmamın) dosyayı diğer şekilde yüklersem geri bildirim alamayacağımı düşündüm. Belki doğru belki yanlış. Bilmiyorum. Ama bu şekilde şu an sorunsuz dosya yükleme yapabiliyorum. Bu dosya yüklendiğinde ve submit tuşuna basılması gerektiğinde bir alertbox çıkartıp kullanıcıya dosyanın yüklendiğinin haberini vermek istiyorum. Bunu nasıl yapabilirim?

Şimdiden teşekkürler.
 
Dosya yuklemekten kastettigin upload islemi yapmak mi?
File selector ile file select ettiginde dosya yuklemis oluyor aslinda browser tmp dosyalarina sectigin dosyayi kaydediyor. Sonra submit'e basinca upload ediyor. Sen upload'in sonucunu mu gormek istiyorsun?

Normal form davranisini iptal edip, kendin XmlHttpRequest olusturarak upload edersen progress edebilirsin.

XMLHttpRequest: progress event
 

Öncelikle cevap için teşekkürler.
Django da yeni olduğum için bazı şeyleri bilmiyorum.
Daha önce yüksek boyutta dosya yüklemeyi denemedim. Yazdığınızdan anladığım kadarıyla zaten submit butonuna basınca dosyayı yüklemeye başlıyor doğru muyum?
Ben dosyayı seçtikten sonra dosya yüklenmeye başlıyor sanıyordum ve büyük bir dosya yüklediğimiz zaman sürecin bitmesini beklememiz sonra submit etmemiz gerekiyor sanıyordum.
Büyük dosya yüklemesi yaptığı zaman kullanıcı bunu Django halledebiliyor mu? Ben bir yerde sanırım 300mb nin üzerinde dosya almadığını okumuştum.
 

Django cok bilmiyorum ama genel olarak Django gibi framework ler kullandim. Genellikle upload boyutuna hepsi keyfi olarak bir limitasyon getirir. Tomcat 100MB getiriyordu en son, Oracle Weblogic 10MB. Bunlar default degerler, teorik olarak bir limiti yok istedigin gibi arttirabilirsin. Ama kullanicinin cok yuksek boyutlu dosya yuklemesine izin vermek de ayri bir guvenlik zaafiyeti, DDOS gibi serverini kullanilamaz hale getirebilir junk dosya upload ederek. Yapacagin ise gore mantikli bir limit belirleyip ona gore hareket etmen gerek.

Ve evet, dosya sectigi anda upload etmeye baslamaz. ( Istersen Javascript ile sectigi anda da upload etmesini baslatabilirsin ). Once dosyayi secer, tmp bir dizine yazar, sonra form submit ederken upload isine baslar. Bu noktalarin aslinda Django ile alakasi yok, hala front-end desin cunku, henuz backend e 1 bit bile gitmedi.
 
O biraz üst bilgi gerektirir ancak neden olmayacağını kendi Django sitem ile anlatayım:





Ufak bir blog sayfası. Makale ekleyebiliyoruz. Muhtemelen aynı sistemi yapmışız .







Makale sayfasında iki tane önceden eklediğim var, takılma onlara. Yeni bir makale ekleyelim.







Burada dosya olarak bir resim ekleyeceğim.







Şimdi önce, resimlerin saklandığı Database'e bakalım:




"Media" klasörü gördüğün gibi boş. ("Kedi.jpg" aklına takılmasın, önceki bir deneme o .)





Klasör tam hâli:








Resmi ekleyelim:










Dosyayı seçtik, şimdi Database'e bakalım:




Gördüğün gibi, hâlâ eklenmemiş.




Tam hali:




Hâlâ yok.





Şimdi sisteme makaleyi ekleyelim:







Şimdi Database'e bakalım:



Gördüğün gibi yüklendikten sonra Database'e de geldi.




Tam hâli:





Yani:

Yani sen orada dosyayı seçince bir yükleme olmuyor, sen submit edince sisteme dosya gidiyor. O yüzden seçince yüklenme çubuğu eklemek sıkıntı oluyor. Sen submit edince Database'e resim yükleniyor yani upload ediliyor.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…