Voici mon formulaire HTML:
<form name="myForm" ng-submit="">
<input ng-model='file' type="file"/>
<input type="submit" value='Submit'/>
</form>
Je souhaite télécharger une image de la machine locale et je souhaite lire le contenu du fichier téléchargé. Tout cela, je veux le faire en utilisant AngularJS.
Lorsque j'essaie d'imprimer la valeur de $scope.file
celle - ci est indéfinie.
angularjs
angularjs-fileupload
Aditya Sethi
la source
la source
Réponses:
Certaines des réponses
FormData()
proposées ici sont proposées, mais malheureusement, il s'agit d'un objet navigateur non disponible dans Internet Explorer 9 et versions antérieures. Si vous devez prendre en charge ces anciens navigateurs, vous aurez besoin d'une stratégie de sauvegarde telle que l'utilisation de<iframe>
Flash ou.Il existe déjà de nombreux modules Angular.js pour effectuer le téléchargement de fichiers. Ces deux ont un support explicite pour les anciens navigateurs:
Et quelques autres options:
L'une d'elles devrait correspondre à votre projet ou vous donner un aperçu de la façon de la coder vous-même.
la source
Le plus simple est d'utiliser l'API HTML5, à savoir
FileReader
Le HTML est assez simple:
Dans votre contrôleur, définissez la méthode «ajouter»:
Compatibilité du navigateur
Navigateurs de bureau
Navigateurs mobiles
Remarque: la méthode readAsBinaryString () est déconseillée et readAsArrayBuffer () doit être utilisée à la place.
la source
onloadend
fonction de rappel. Vous n'avez besoin d'aucune bibliothèque pour utiliser cette API, elle est déjà dans votre navigateur (sauf si vous en utilisez une très ancienne). J'espère que cela t'aides.readAsArrayBuffer
méthode FileReaderSync (qui n'est disponible que dans les travailleurs Web) au lieu de l' API FileReader asynchrone habituelle ?Il s'agit du navigateur moderne, sans bibliothèques tierces. Fonctionne sur tous les derniers navigateurs.
HTML:
PHP:
js fiddle (seulement front-end) https://jsfiddle.net/vince123/8d18tsey/31/
la source
ng-submit
ou d'une action de formulaire? Cela en soi ne fait rienVoici un exemple pratique de téléchargement de fichiers:
http://jsfiddle.net/vishalvasani/4hqVu/
Dans cette seule fonction appelée
Depuis la vue qui mettra à jour le tableau de fichiers dans le contrôleur
ou
Vous pouvez vérifier le téléchargement de fichiers jQuery en utilisant AngularJS
http://blueimp.github.io/jQuery-File-Upload/angularjs.html
la source
Vous pouvez obtenir le fichier et le dossier agréable téléchargement à l' aide flow.js .
https://github.com/flowjs/ng-flow
Découvrez une démo ici
http://flowjs.github.io/ng-flow/
Il ne prend pas en charge IE7, IE8, IE9, vous devrez donc éventuellement utiliser une couche de compatibilité
https://github.com/flowjs/fusty-flow.js
la source
Utilisez l'
onchange
événement pour passer l'élément de fichier d'entrée à votre fonction.<input type="file" onchange="angular.element(this).scope().fileSelected(this)" />
Ainsi, lorsqu'un utilisateur sélectionne un fichier, vous y avez une référence sans que l'utilisateur ait besoin de cliquer sur un bouton "Ajouter" ou "Télécharger".
la source
J'ai essayé toutes les alternatives que donne @Anoyz (réponse correcte) ... et la meilleure solution est https://github.com/danialfarid/angular-file-upload
Certaines fonctionnalités:
Ça marche bien pour moi. Il suffit de faire attention aux instructions.
Côté serveur, j'utilise des middleware NodeJs, Express 4 et Multer pour gérer les requêtes en plusieurs parties.
la source
nlzt9LJWRrAZEO3ZteZUOgGc
le format .png mais sans. Comment ajouter ça?HTML
Scripts
la source
L'
<input type=file>
élément ne fonctionne pas par défaut avec la directive ng-model . Il a besoin d'une directive personnalisée :Démonstration de travail d'une
select-ng-files
directive qui fonctionne avecng-model
1$http.post
à partir d'une FileListLors de l'envoi d'un POST avec un objet File , il est important de définir
'Content-Type': undefined
. La méthode d'envoi XHR détectera alors l' objet File et définira automatiquement le type de contenu.la source
Facile avec une directive
Html:
JS:
Dans la directive, nous nous assurons qu'une nouvelle portée est créée, puis écoutons les modifications apportées à l'élément d'entrée de fichier. Lorsque des modifications sont détectées avec émettre un événement vers toutes les étendues d'ancêtre (vers le haut) avec l'objet fichier comme paramètre.
Dans votre contrôleur:
Puis dans votre appel ajax:
http://shazwazza.com/post/uploading-files-and-json-data-in-the-same-request-with-angular-js/
la source
je pense que c'est le téléchargement de fichier angulaire:
ng-file-upload
Directive JS angulaire légère pour télécharger des fichiers.
Voici la page DEMO .
https://github.com/danialfarid/ng-file-upload
la source
Votre fichier et les données json sont téléchargés en même temps.
la source
Vous pouvez utiliser un
FormData
objet sûr et rapide:la source
<input type="file" ng-change="contentChanged($event)">
, comment faire?http://jsfiddle.net/vishalvasani/4hqVu/ fonctionne très bien en chrome et IE (si vous mettez à jour CSS un peu en image de fond). Ceci est utilisé pour mettre à jour la barre de progression:
mais dans FireFox, les données [pourcent] angulaires ne sont pas correctement mises à jour dans DOM, bien que les fichiers soient téléchargés avec succès.
la source
load
événement et si la longueur est calculable, puis déclencher un événement de progression pour indiquer le téléchargement réussi. github.com/danialfarid/angular-file-upload s'occupe déjà de cela.Vous pouvez envisager l'IaaS pour le téléchargement de fichiers, tel que Uploadcare . Il existe un package Angular pour cela: https://github.com/uploadcare/angular-uploadcare
Techniquement, il est implémenté en tant que directive, fournissant différentes options pour le téléchargement et les manipulations pour les images téléchargées dans le widget:
Plus d'options de configuration pour jouer avec: https://uploadcare.com/widget/configure/
la source
Je sais que c'est une entrée tardive mais j'ai créé une simple directive de téléchargement. Que vous pouvez travailler en un rien de temps!
ng-simple-upload plus sur Github avec un exemple utilisant l'API Web.
la source
HTML
ajoutez la méthode 'profileimage ()' à votre contrôleur
la source
Cela devrait être une mise à jour / commentaire de la réponse de @ jquery-guru mais comme je n'ai pas assez de représentants, cela ira ici. Il corrige les erreurs qui sont maintenant générées par le code.
https://jsfiddle.net/vzhrqotw/
Le changement est essentiellement:
À:
N'hésitez pas à vous déplacer vers un endroit plus approprié si vous le souhaitez.
la source
J'ai lu tout le fil et la solution API HTML5 était la meilleure. Mais cela modifie mes fichiers binaires, les corrompant d'une manière que je n'ai pas étudiée. La solution qui a parfaitement fonctionné pour moi était:
HTML:
JS:
Côté serveur (PHP):
la source
Je peux télécharger des fichiers en utilisant AngularJS en utilisant le code ci-dessous:
Le
file
pour l'argument qui doit être passé pour la fonctionngUploadFileUpload
est$scope.file
selon votre question.Le point clé ici est d'utiliser
transformRequest: []
. Cela empêchera $ http de jouer avec le contenu du fichier.la source
La réponse acceptée ci-dessus n'est pas compatible avec le navigateur. Si quelqu'un a un problème de compatibilité, essayez ceci.
Violon
Afficher le code
Code contrôleur
la source
en mots simples
en Html - ajoutez le code ci-dessous uniquement
dans le contrôleur - Cette fonction est appelée lorsque vous cliquez sur " bouton de téléchargement de fichier" . il téléchargera le fichier. vous pouvez le consoler.
ajouter plus dans les contrôleurs - sous le code ajouter dans la fonction. Cette fonction est appelée lorsque vous cliquez sur le bouton qui est utilisé "frapper l'API (POST)" . il enverra le fichier (qui a téléchargé) et les données du formulaire au backend.
dans ce cas .. j'ai ajouté le code ci-dessous comme données de formulaire
la source
Dans le contrôleur angularJS
la source
Nous avons utilisé HTML, CSS et AngularJS. L'exemple suivant montre comment télécharger le fichier à l'aide d'AngularJS.
la source
Exemple de travail utilisant une directive simple ( modèle de fichier ng ):
et utilisez
FormData
pour télécharger le fichier dans votre fonction.tous les crédits vont pour https://github.com/mistralworks/ng-file-model
J'ai rencontré un petit problème, vous pouvez le vérifier ici: https://github.com/mistralworks/ng-file-model/issues/7
Enfin, voici un dépôt fourchu: https://github.com/okasha93/ng-file-model/blob/patch-1/ng-file-model.js
la source
Le code aidera à insérer le fichier
insert.js
save_data.php
la source
cela marche
file.html
controller.js
fileupload.php
la source
TÉLÉCHARGER DES FICHIERS
TELECHARGER DES FICHIERS:
la source
la source