Yaptığım bir Django- tabanlı sitede dosya yüklemeleri yapmak için Valum'un Ajax Yükleme'yi kullanmaya çalışıyorum. Şu anda bir formdan kaçınmaktayım çünkü AU, yüklemeyi bir ajax isteğinde POST verilerinin tamamı olarak gönderir. Şu anda bunu yapmak için çok saf bir yaklaşımım var:Django Ajax Bir Form Dışı Yükleme
upload = SimpleUploadedFile(filename, request.raw_post_data)
...then I loop through the chunks to write to disk...
Bu küçük dosyalar üzerinde harika çalışıyor. PDF'lerle, çeşitli diğer dosyalarla ve ~ 20MB Google Chrome deb paketine kadar test ettim ve hepsi harika. Bununla birlikte, CD veya DVD iso gibi bir şeye geçersem, korkunç bir şekilde bombalar. Sık sık Django, bir Bellek Dolu yanıtı geri gönderir. Yüzeyde, SimpleUploadedFile, yükleme sınıflarının bir bellek içi sürümü olan olduğundan bu anlamlıdır. yapıcısında gerçek içeriği almadığı için TemporaryUploadedFile öğesinin nasıl kullanıldığını göremiyorum. Bir yan not olarak: Ben kullanılabilir RAM kullandıktan sonra düşünürdüm, sanal belleğe gider, ama her neyse.
Yani, sorum şu, işe nasıl başlarım? Dosyada okumak için daha iyi bir yolu var mı? Python'un IO'sunu (sistem 2.6.5'i kullanır) kullanarak raw_post_data'yı doğrudan okumayı denedim, ancak ikili dosyaları ile çalışırken FileIO'nun ascii encoder/decoder açıkçası ascii olmayan karakterler hakkında şikayette bulunacaktır. kodlayıcı/kod çözücüyü değiştirmeyle ilgili bilgileri bulamadım.
bir forma veri geçirerek ve Django benzeri Doğru yükleme sınıfını toplama ve işi yapmak zorunda sakıncası olmaz, ama bunu nasıl geçirileceği bilemiyorumçünkü
upload_form = UploadForm(request.POST, request.FILES)
gibi bir şey
, POST dosyayı içerdiğinden ve normal Django bilgisi değil ve FILES bulunmadığından çalışmayacaktır.
Dediğim gibi, çözüm yönteminden endişelenmiyorum, sadece bu Çalıştığım bir şey buluyorum! Teşekkürler!
Ajax Upload'un Django 1 ile çalışmasını sağlayarak tam resmi gösteren bir blog yazısı yazdım.Yukarıdaki çözümü içeren 3. http://kuhlit.blogspot.com/2010/12/ajax-uploads-in-django-with-little-help.html –
Bu @ alex-kuhl için teşekkürler Dosyaya benzer desteği içine sokmanın bir yolu var mı Django'nun son sürümü (1.2.5)? Korkarım bağımlılığı cehenneme yükselteceğim. – michela
1.3'e yükseltme yapmakta herhangi bir sorun yaşamadım, bu yüzden düşündüğünüz kadar kötü olmayabilir. Ben asla 1.2.5'te dosyaya benzer bir destek almayı denemedim, bu yüzden yapılıp yapılamayacağından emin değilim, kolay bir şekilde şüpheleniyorum. Yukarıdaki ilk snippet'te yaptığım şey, düzenli Python işlevselliğini kullanmaya ve Django'dan kaçınmaya çalışmaktı. Benim de söylediğim gibi işe yaradı, ancak belli bir boyuttaki dosyalar için başarısız oldu. Büyük dosyalara izin vermezseniz, kodu olduğu gibi kullanabilirsiniz. Aksi halde, tüm vakalarda çalışmak için bunu düzeltmenin bir yolu olduğundan eminim. Farklı sınıflar kullanarak dosya okuma/yazma yapmak kadar basit olabilir. –