Açısal kullanarak dosya göndermek neden bu kadar zor? [kapalı]


18

Bir sunucuya dosya (çok büyük dosya) göndermek zorundayım. Hangi seçeneklere sahip olduğumu ve nasıl yapacağımı inceliyorum. Açısal + ekspres + düğümü kullanıyorum.

Basit bir form kullanırsam, multer kullanarak sorunsuz bir şekilde sunucudaki dosyayı yakalayabilirim. Çok basit. Html sadece hedef vb belirttiğiniz bir form, ve her şey çalışıyor. Nodejs kodu da çok basit ve basittir.

Açısal kullanmaya çalıştığımda, her şey inanılmaz derecede karmaşık hale geliyor. Yani, bir yönerge kullanmak zorundayım ve hala sunucuyla ilgili sorunum var. Dediğim gibi, multer kullanıyorum, bu da verilerin "çok parçalı / form-veri" olmasını gerektiriyor ve sunucudan alıyorum "Hata: Çok Parça: Sınır bulunamadı"

Açısal olarak dosyaları yüklemek için birçok modül vardır. Bu, birden fazla çözümde tekrarlayan bir sorun olduğunu gösterir. Şimdi, kod göndermek istemiyorum çünkü bunun için Stack Overflow sordum . Sorum daha incelikli:

Neden basit bir formla neler yapılabilir, açısal olarak bu kadar karmaşık olsun? Kötü bir şekilde kastetmiyorum. Yani 'Anlamak istiyorum' tarzında.


bu bir şekilde Stack Overflow'daki son sorunuzla mı ilgili? "'Sınır bulunamadı' hatasını nasıl çözebilirim ve ne anlama geliyor ..."
gnat

2
Evet, bu yüzden soruyu bağlantıya koydum. Ama burada sorunu çözmek istemiyorum. İlk etapta neden bir sorun olduğunu bilmek istiyorum.
cauchy

Yanıtlar:


21

Açısal Tek Sayfa Uygulamaları içindir, formlar sayfanın yeniden yüklenmesini önlemek için AJAX kullanılarak gönderilir. AJAX ile çok bölümlü formlar göndermek için tarayıcınızın FormData(IE10 +) desteklemesi gerekir : http://caniuse.com/#search=FormData

https://developer.mozilla.org/en-US/docs/Web/API/FormData

ngModel[type = "file"] girişiyle çalışmadığından kendi yönergenizi oluşturmanız gerekir. Kendi direktifiniz basit olmalıdır: değiştiğinde, Filekapsamınızdaki bir nesneyi güncelleyin .

Formunuzu gönderirken bir FormDatanesne oluşturun ve dosyalarınızı FormData.setveya tuşlarını kullanarak ona ekleyin FormData.append. FormData öğenizi $httpveya ile gönderebilirsiniz $resourceve içerik türü ve sınırını ayarlamak için tarayıcıya güveniyorsunuzdur.

var formData = new FormData();
formData.append('file', $scope.file);
$http.post('yourUrl', formData, {
   transformRequest: angular.identity,
   headers: {'Content-Type': undefined}
}).then(function () {
   // ...
});

angular.identity Angular'ın verilerimizde herhangi bir şey yapmasını önler (serileştirmek gibi).

Bu makaleyi tavsiye ederim: https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs


3
Dosya direktifinin neden açısal olarak bırakıldığını merak ediyorum!
user237944
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.