Tengo que enviar un archivo (archivo muy grande) a un servidor. Estoy estudiando qué opciones tengo y cómo hacerlo. Estoy usando angular + express + nodejs.
Si uso un formulario simple, podría atrapar el archivo en el servidor usando multer sin ningún problema. Es muy simple. El html es solo una forma, en la que especifico el objetivo, etc. y todo funciona. El código de nodejs también es muy simple y directo.
Tan pronto como trato de usar angular, todo se vuelve increíblemente complicado. Es decir, tengo que usar una directiva y todavía tengo problemas con el servidor. Como dije, estoy usando multer, que requiere que los datos sean "multipart / form-data", y obtengo del servidor "Error: Multipart: Límite no encontrado"
Hay muchos módulos para cargar archivos en angular. Lo que demuestra que es un problema recurrente con más de una solución. Ahora, no quiero publicar código porque lo pregunté en Stack Overflow . Mi pregunta es más sutil:
¿Por qué lo que se puede hacer con una forma simple, se vuelve tan complicado en angular? No lo digo en el mal sentido. Lo digo en forma de 'Quiero entender'.
fuente
Respuestas:
Angular es para aplicaciones de una sola página, los formularios se envían utilizando AJAX para evitar que la página se vuelva a cargar. Para enviar formularios multiparte con AJAX, su navegador debe ser compatible
FormData
(IE10 +): http://caniuse.com/#search=FormDatahttps://developer.mozilla.org/en-US/docs/Web/API/FormData
ngModel
no funciona con input [type = "file"], por lo que debe crear su propia directiva. Su propia directiva debería ser simple: en el cambio, actualice unFile
objeto en su alcance.Al enviar su formulario, cree un
FormData
objeto y agregue sus archivos conFormData.set
oFormData.append
. Puede enviar sus FormData con$http
o$resource
, y depende del navegador para configurar el tipo de contenido y el límite.angular.identity
evita que Angular haga algo con nuestros datos (como serializarlos).Recomiendo este artículo: https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs
fuente