Comment puis-je supprimer un fichier de la liste de Fichiers
Je suis en train de construire un glisser-déposer-à-téléchargement application web en utilisant HTML5, et je suis à la suppression de fichiers sur un div et bien sûr de l'extraction de l'objet dataTransfer, ce qui me donne le FileList.
Maintenant, je veux supprimer certains fichiers, mais je ne sais pas comment, ou si c'est encore possible.
De préférence, j'aimerais simplement les supprimer de la liste de Fichiers; je n'ai pas d'emploi pour eux. Mais si ce n'est pas possible, devrais-je plutôt écrire dans les contrôles dans le code qui interagit avec la liste de Fichiers? Qui semble lourd.
- Juste par curiosité: pourquoi voulez-vous faire cela? Pourquoi dites-vous “je n'ai pas d'emploi pour eux” a propos de (certains) des fichiers de l'utilisateur a sélectionné?
- C'est sans doute plus, de sorte que l'utilisateur peut supprimer des fichiers avant de les télécharger. Si vous aviez sélectionnée à l'origine de 20, puis vous décidez que vous ne voulez pas télécharger le 14, alors vous ne pouvez pas supprimer un, vous devez tout recommencer (ce qui est un peu de douleur). Je pense faire de la liste de Fichiers en lecture seule est une mauvaise surveillance, à moins qu'il y a une certaine incidence sur la sécurité, je ne suis pas voyant.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez seulement supprimer plusieurs fichiers sélectionnés: vous ne pouvez pas. Le Fichier API Projet de Travail vous lié à une note:
Lecture, un peu de HTML 5, document de Travail, je suis tombé sur le Commune de
entrée
de l'élément Api. Il apparaît, vous pouvez supprimer le ensemble liste des fichiers en paramètre de lavalue
propriété de lainput
objet à une chaîne vide, comme:BTW, l'article À l'aide de fichiers à partir d'applications web pourrait également être d'intérêt.
length
est en lecture seule, je pense. J'essaie de supprimer un élément avec l'épissure, il échoue dans Chrome.value
de la<input>
élément denull
semble fonctionne exactement le même que''
, par la manière.Cette question a déjà été marquée répondu, mais je tiens à partager certaines informations qui pourraient aider les autres avec l'aide de la liste des Fichiers.
Il serait commode de traiter une liste de Fichiers dans un tableau, mais de méthodes comme le tri, de décalage, de la pop, et des tranches de ne pas travailler. Comme d'autres l'ont suggéré, vous pouvez copier ce Fichier dans un tableau. Cependant, plutôt que d'utiliser une boucle, il y a un simple une solution en ligne pour gérer cette conversion.
Testé OK FF, Chrome, et IE10+
Array.from(fileDialog.files)
est plus simplefileDialog.files = fileBuffer
?Si vous ciblez evergreen navigateurs (Chrome, Firefox, Edge, mais travaille aussi dans Safari 9+) ou vous pouvez vous permettre un polyfill, vous pouvez activer la liste de Fichiers dans un tableau en utilisant
Array.from()
comme ceci:Alors il est facile de manipuler le tableau de
File
s comme de tout autre tableau.Puisque nous sommes dans le HTML5 domaine, c'est ma solution. L'essentiel est que vous poussez les fichiers d'un Tableau au lieu de les laisser dans une liste de Fichiers, puis à l'aide XHR2, vous poussez les fichiers vers un objet FormData. L'exemple ci-dessous.
J'ai trouvé très rapide & court de solution pour cela. Testé dans de nombreux navigateurs (Chrome, Firefox, Safari);
Tout d'abord, vous devez convertir les Fichiers vers un Tableau
pour supprimer l'élément en particulier l'utilisation de cette
event.target.files
qui n'est pas lié à l'entrée donc il ne peut pas changer quoi que ce soit à l'exception de votre variable locale..Je sais que c'est une vieille question, mais c'est le classement sur les moteurs de recherche en ce qui concerne cette question.
propriétés dans le FileList objet ne peut pas être supprimé, mais au moins sur Firefox ils peuvent être modifiés. Ma solution à ce problème est d'ajouter une propriété
IsValid=true
à ces fichiers, qui est passé de vérifier et deIsValid=false
à ceux qui n'en ont pas.alors je viens de faire une boucle par la liste pour s'assurer que seulement les propriétés avec
IsValid=true
sont ajoutés à FormData.Il pourrait y avoir une façon plus élégante de le faire, mais, voici ma solution. Avec Jquery
Fondamentalement, vous taquet de la valeur de l'entrée. Clone et mettre le clone en lieu et place de l'ancien.
C'est extemporary, mais j'ai eu le même problème que j'ai résolu de cette façon. Dans mon cas, j'ai été télécharger les fichiers via XMLHttp demande, j'ai donc été en mesure de publier la liste de Fichiers cloné de données par le biais de formdata ajoutant. Fonctionnalité est que vous pouvez faire glisser et déposer ou de sélectionner plusieurs fichiers, autant de fois que vous le souhaitez (à sélectionner les fichiers à nouveau de ne pas réinitialiser la cloné FileList), supprimer n'importe quel fichier que vous voulez à partir de la (clone) de la liste de fichiers, et de les soumettre via xmlhttprequest ce qu'il en restait là. C'est ce que j'ai fait. C'est mon premier post ici donc le code est un peu bordélique. Désolé. Ah, et j'ai dû utiliser jQuery au lieu de $ comme il était dans Joomla script.
Maintenant le code html et des styles pour cette. Je suis un débutant mais tout cela a effectivement travaillé pour moi et m'a pris un certain temps pour comprendre.
Les styles pour cette. J'ai dû marquer certains d'entre eux !important de substituer Joomla comportement.
J'espère que cette aide.
Si vous avez la chance d'être de l'envoi d'une requête post à la base de données avec les fichiers et que vous avez les fichiers que vous souhaitez envoyer à votre DOM
vous pouvez simplement vérifier si le fichier dans la liste des fichiers présents dans votre DOM, et bien sûr, si ce n'est pas vous juste de ne pas envoyer de cet élément de DB.
Merci @Nicholas Anderson simple et droite , voici votre code et de travailler à mon code à l'aide de jquery.
HTML .
CODE JS
Vous pouvez créer un tableau et utiliser à la place de la lecture-seule la liste des fichiers.
Après que le point de faire votre téléchargement à l'encontre de votre liste à la place de l'élément dans la liste. Je ne suis pas sûr du contexte dans lequel vous travaillez, mais je travaille avec un plugin jquery que j'ai trouvé et ce que j'avais à faire était de prendre le plugin source et de le mettre en page à l'aide de
<script>
balises. Puis au-dessus de la source, j'ai ajouté mon tableau de sorte qu'il peut agir comme une variable globale et le plugin peuvent faire référence.Puis c'était juste une question de remplacer les références.
Je pense que ce serait vous permettent d'ajouter aussi le drag & drop aussi, encore une fois, si le bâti de la liste est en lecture seule alors comment pourriez-vous obtenir les fichiers déposés dans la liste?
:))
FileList
objet de lamyReadWriteList
variable, elle change de type deArray
àFileList
, donc ce n'est pas une solution.Je viens de changer le type d'entrée pour le texte et l'arrière du fichier 😀