2017-07-17 1 views
0

Lorsque des fichiers et l'accès à l'abandon à l'information de ces fichiers, avecjavascript, html5: e.dataTransfer.items vs e.dataTransfer.files, comment obtenir la taille du fichier avec le premier?

let files= e.dataTransfer.files; 

vous pouvez vérifier la taille du fichier (https://developer.mozilla.org/en-US/docs/Web/API/File). Mais si vous utilisez le plus récent (et le remplaçant pour autant que je peux lire)

let items = e.dataTransfer.items; 

Alors il n'y a pas moyen d'accéder à la taille du fichier (https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items).

Quelle serait la bonne façon de connaître la taille du fichier déposé?

Réponse: en accédant au fichier avec .getAsFile()

Mais, comment le faire lors de la lecture d'un répertoire? Voir le code

let items = e.dataTransfer.items; 
for (let i=0; i < items.length; i++) { 
    let item = items[i].webkitGetAsEntry(); 
    if (item && item.isFile) 
     console.log(items[i].getAsFile()); // HERE IT WORKS 
    else if (item && item.isDirectory) { 
     item.createReader().readEntries(function(entries) { 
      for (let j=0; j<entries.length; j++) 
       see_file(entries[j].getAsFile()); // HERE IT DOES NOT WORK 
     }); 
    } 
} 
+0

est la réponse à votre question _ _ non inclus « Quelle serait la bonne façon de connaître la taille du fichier déposé? » à Question elle-même _ "Lors de la suppression des fichiers et l'accès à l'information de ces fichiers, avec ' let fichiers = e.dataTransfer.files; ' vous pouvez vérifier la taille du fichier" _? Quel est le problème avec l'utilisation de 'event.dataTransfer.files'? – guest271314

+0

D'après ce que j'ai lu, .fils semble être déprécié en faveur de .items (?) – Gerard

+0

Pouvez-vous fournir un lien vers ce que vous avez lu où '.files' est obsolète? – guest271314

Répondre

0

De la réponse fournie dans les commentaires, nous avons les éléments suivants:

Si l'élément déposé est un répertoire, la ligne

item.createReader().readEntries(function(entries) { 

génère un tableau de entries que eux-mêmes sont comme item.webkitGetAsEntry() instances.

Il n'y a aucun moyen d'accéder au « parent », quelque chose comme

for (let j=0; j<entries.length; j++) { 
    let parent = entries[j].parent; 
    console.log(parent.webkitGetAsEntry()); 
    console.log(parent.getAsFile()); 
    //console.log(entries[j].getAsFile()) -> this fails 
} 

Mais, à partir du code de la réponse mentionnée ci-dessus, on peut le faire

for (let j=0; j<entries.length; j++) { 
    entries[j].file(function(file) { 
    console.log(file.webkitGetAsEntry()); 
    console.log(file.getAsFile()); 
    }); 
} 

et donc avec succès l'accès au noeud "parent". Mais je n'ai pas pu trouver de documentation à ce sujet, qu'est-ce qui me manque?

EDIT: Vous pouvez trouver ici https://wicg.github.io/entries-api/#api-fileentry (vu dans les commentaires)

+0

Au lieu de poser une question dans votre réponse, peut-être envisager de poser une question distincte et spécifique? Que voulez-vous dire par "" parent "node"? Qu'est-ce que vous essayez réellement d'accomplir? – guest271314

+0

Par nœud "parent", je veux dire le nœud parent, comme expliqué ici https://developer.mozilla.org/en-US/docs/Web/API/Node/parentNode. Ce que j'essaye d'accomplir est d'avoir accès à la fonction getAsFile(), ce que je peux maintenant comme expliqué dans le texte. – Gerard

+0

Les instances 'File' et' Directory' ne sont pas des nœuds. Vous avez accès à l'instance 'Directory' à' if (entry.isFile) { entry.file (fonction (fichier) { listFile (fichier, entry.fullPath) .then (résolution) }) } else if (entrée .isDirectory) { var lecteur = entry.createReader(); } 'à la réponse à la question – guest271314