Aquí está mi formulario HTML:
<form name="myForm" ng-submit="">
<input ng-model='file' type="file"/>
<input type="submit" value='Submit'/>
</form>
Quiero cargar una imagen de la máquina local y quiero leer el contenido del archivo cargado. Todo esto lo quiero hacer usando AngularJS.
Cuando trato de imprimir el valor $scope.file
viene como indefinido.
angularjs
angularjs-fileupload
Aditya Sethi
fuente
fuente
Respuestas:
Algunas de las respuestas aquí proponen el uso
FormData()
, pero desafortunadamente es un objeto del navegador que no está disponible en Internet Explorer 9 y versiones posteriores. Si necesita admitir esos navegadores antiguos, necesitará una estrategia de copia de seguridad como usar<iframe>
o Flash.Ya hay muchos módulos Angular.js para realizar la carga de archivos. Estos dos tienen soporte explícito para navegadores antiguos:
Y algunas otras opciones:
Uno de estos debe ajustarse a su proyecto, o puede darle una idea de cómo codificarlo usted mismo.
fuente
Lo más fácil es usar la API HTML5, es decir
FileReader
HTML es bastante sencillo:
En su controlador, defina el método 'agregar':
Compatibilidad del navegador
Navegadores de escritorio
Navegadores móviles
Nota: el método readAsBinaryString () está en desuso y se debe usar readAsArrayBuffer () en su lugar.
fuente
onloadend
función de devolución de llamada. No necesita ninguna biblioteca para usar esta API, ya está en su navegador (a menos que use una muy antigua). Espero que esto ayude.readAsArrayBuffer
método de FileReaderSync (que solo está disponible en los trabajadores web) en lugar de la API asíncrona normal de FileReader ?Esta es la forma moderna del navegador, sin bibliotecas de terceros. Funciona en todos los últimos navegadores.
HTML:
PHP:
js fiddle (solo front-end) https://jsfiddle.net/vince123/8d18tsey/31/
fuente
ng-submit
o una acción de formulario? Esto por sí solo no hace nadaA continuación se muestra un ejemplo funcional de carga de archivos:
http://jsfiddle.net/vishalvasani/4hqVu/
En esta función llamada
Desde la vista, que actualizará la matriz de archivos en el controlador
o
Puede verificar la carga de archivos jQuery usando AngularJS
http://blueimp.github.io/jQuery-File-Upload/angularjs.html
fuente
Puede lograr una buena carga de archivos y carpetas usando flow.js .
https://github.com/flowjs/ng-flow
Mira una demostración aquí
http://flowjs.github.io/ng-flow/
No es compatible con IE7, IE8, IE9, por lo que eventualmente tendrá que usar una capa de compatibilidad
https://github.com/flowjs/fusty-flow.js
fuente
Use el
onchange
evento para pasar el elemento del archivo de entrada a su función.<input type="file" onchange="angular.element(this).scope().fileSelected(this)" />
Entonces, cuando un usuario selecciona un archivo, tiene una referencia a él sin que el usuario tenga que hacer clic en el botón "Agregar" o "Cargar".
fuente
Probé todas las alternativas que @Anoyz (respuesta correcta) ofrece ... y la mejor solución es https://github.com/danialfarid/angular-file-upload
Algunas caracteristicas:
Me funciona bien. Solo tienes que prestar atención a las instrucciones.
En el lado del servidor, uso NodeJs, Express 4 y el middleware Multer para gestionar la solicitud de varias partes.
fuente
nlzt9LJWRrAZEO3ZteZUOgGc
pero sin el formato .png. ¿Cómo agregar eso?HTML
Guiones
fuente
El
<input type=file>
elemento no funciona por defecto con la directiva ng-model . Necesita una directiva personalizada :Demostración de trabajo de la
select-ng-files
directiva que funciona conng-model
1$http.post
de una FileListAl enviar una POST con un objeto File , es importante configurarlo
'Content-Type': undefined
. El método de envío XHR detectará el objeto Archivo y establecerá automáticamente el tipo de contenido.fuente
Fácil con una directiva
HTML:
JS:
En la directiva nos aseguramos de que se cree un nuevo ámbito y luego escuchamos los cambios realizados en el elemento de entrada del archivo. Cuando se detectan cambios con emitir un evento a todos los ámbitos ancestros (hacia arriba) con el objeto de archivo como parámetro.
En tu controlador:
Luego, en su llamada ajax:
http://shazwazza.com/post/uploading-files-and-json-data-in-the-same-request-with-angular-js/
fuente
Creo que esta es la carga angular del archivo:
ng-file-upload
Directiva ligera JS angular para cargar archivos.
Aquí está la página DEMO .
https://github.com/danialfarid/ng-file-upload
fuente
Su archivo y datos json se cargan al mismo tiempo.
fuente
Puede usar un
FormData
objeto que sea seguro y rápido:fuente
<input type="file" ng-change="contentChanged($event)">
, ¿cómo hacerlo?http://jsfiddle.net/vishalvasani/4hqVu/ funciona bien en Chrome e IE (si actualiza CSS un poco en la imagen de fondo). Esto se usa para actualizar la barra de progreso:
pero en FireFox los datos [porcentuales] de angular no se actualizan correctamente en DOM, aunque los archivos se cargan correctamente.
fuente
load
evento y, si la longitud es computable, dispare un evento de progreso para indicar la carga exitosa. github.com/danialfarid/angular-file-upload ya se encarga de eso.Puede considerar IaaS para la carga de archivos, como Uploadcare . Hay un paquete angular para ello: https://github.com/uploadcare/angular-uploadcare
Técnicamente se implementa como una directiva, que proporciona diferentes opciones para cargar y manipulaciones para las imágenes cargadas dentro del widget:
Más opciones de configuración para jugar: https://uploadcare.com/widget/configure/
fuente
Sé que es una entrada tardía, pero he creado una directiva de carga simple. ¡Lo que puedes conseguir trabajando en poco tiempo!
ng-simple-upload más en Github con un ejemplo usando API web.
fuente
HTML
agregue el método 'profileimage ()' a su controlador
fuente
Esto debería ser una actualización / comentario a la respuesta de @ jquery-guru, pero como no tengo suficiente representante, irá aquí. Soluciona los errores que ahora genera el código.
https://jsfiddle.net/vzhrqotw/
El cambio es básicamente:
A:
Siéntase libre de moverse a un lugar más apropiado si lo desea.
fuente
He leído todo el hilo y la solución API HTML5 se ve mejor. Pero cambia mis archivos binarios y los corrompe de una manera que no he investigado. La solución que funcionó perfectamente para mí fue:
HTML:
JS:
Lado del servidor (PHP):
fuente
Puedo cargar archivos usando AngularJS usando el siguiente código:
El
file
argumento por el que se debe pasar para la funciónngUploadFileUpload
es$scope.file
según su pregunta.El punto clave aquí es usar
transformRequest: []
. Esto evitará que $ http se enrede con el contenido del archivo.fuente
La respuesta aceptada arriba no es compatible con el navegador. Si alguien tiene un problema de compatibilidad, intente esto.
Violín
Ver código
Código del controlador
fuente
en palabras simples
en HTML: agregue solo el siguiente código
en el controlador : se llama a esta función cuando hace clic en " botón cargar archivo" . cargará el archivo. Puedes consolarlo.
agregue más en los controladores : a continuación, agregue el código a la función. Esta función se llama cuando hace clic en el botón que se usa "golpear la API (POST)" . enviará el archivo (que cargó) y los datos del formulario al backend.
en este caso ... agregué el siguiente código como datos del formulario
fuente
En el controlador angularJS
fuente
Hemos utilizado HTML, CSS y AngularJS. El siguiente ejemplo muestra cómo cargar el archivo usando AngularJS.
fuente
Ejemplo de trabajo usando Directiva simple ( ng-file-model ):
y use
FormData
para cargar archivos en su función.todos los créditos van para https://github.com/mistralworks/ng-file-model
Me he enfrentado a un pequeño problema, puedes consultarlo aquí: https://github.com/mistralworks/ng-file-model/issues/7
Finalmente, aquí hay un repositorio bifurcado: https://github.com/okasha93/ng-file-model/blob/patch-1/ng-file-model.js
fuente
El código ayudará a insertar el archivo
insert.js
save_data.php
fuente
esto funciona
file.html
controller.js
fileupload.php
fuente
SUBIR ARCHIVOS
DESCARGAR ARCHIVOS:
fuente
fuente