Perché inviare un file è così difficile con l'angolazione? [chiuso]

16

Devo inviare un file (file molto grande) a un server. Sto studiando le opzioni che ho e come farlo. Sto usando angular + express + nodejs.

Se utilizzo un modulo semplice, potrei prendere il file sul server usando multer senza problemi. È molto semplice L'html è solo un modulo, in cui specificano il target ecc. E tutto funziona. Il codice nodejs è anche molto semplice e diretto.

Non appena cerco di usare l'angolare, tutto diventa incredibilmente complicato. Significato, devo usare una direttiva, e ho ancora problemi con il server. Come ho detto sto usando Multer, che richiede che i dati siano "multipart / form-data", e ottengo dal server "Errore: Multipart: Boundary not found"

Ci sono molti moduli per caricare i file in angolare. Il che dimostra che è un problema ricorrente con più di una soluzione. Ora, non voglio pubblicare il codice perché per quel ho chiesto a Overflow dello stack . La mia domanda è più sottile:

Perché cosa si può fare con una forma semplice, è così complicato in modo angolare? Non lo intendo in senso negativo. Lo dico in un modo 'voglio capire'.

    
posta cauchy 06.05.2015 - 17:07
fonte

1 risposta

21

Angolare è per applicazioni a pagina singola, i moduli vengono inviati utilizzando AJAX per evitare il ricaricamento della pagina. Per inviare moduli multipart con AJAX, il tuo browser deve supportare FormData (IE10 +): link

link

ngModel non funziona con input [type="file"], quindi devi creare la tua direttiva. La tua direttiva dovrebbe essere semplice: su modifica, aggiorna un oggetto File sul tuo ambito.

Quando invii il modulo, crea un oggetto FormData e aggiungi i file ad esso utilizzando FormData.set o FormData.append . Puoi inviare i tuoi FormData con $http o $resource , e ti affidi al browser per impostare il tipo di contenuto e il limite.

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

angular.identity impedisce ad Angular di fare qualsiasi cosa sui nostri dati (come serializzarli).

Raccomando questo articolo: link

    
risposta data 06.05.2015 - 17:54
fonte

Leggi altre domande sui tag