Optimiser un upload de fichier et la lecture

Résolu/Fermé
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020 - 17 févr. 2020 à 15:03
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020 - 20 févr. 2020 à 15:20
Bonjour,

J'aimerai savoir s'il existe des manières d'optimiser un upload de fichier géré en Javascript.
J'explique, j'ai un formulaire et je peux uploader n'importe quel fichier, ce fichier je le lis ensuite via un arrayBuffer pour récupérer les octets du fichier sous la forme d'un int, cependant le traitement est relativement rapide sur des petits fichiers, mais sur un fichier à 5Mo rien que là ça plante, il y aurait-il un moyen de lire bloc par bloc ? ou de rendre ça asynchrone (en partant du principe que je dois garder mes octets dans l'ordre)

4 réponses

cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 500
17 févr. 2020 à 15:11
Bonjour,

Sans le code, c'est dur d'aider ...

Après, je ne comprends pas ce que tu essais de faire en voulant faire un upload lu octet par octet !

Il faut nous en dire plus

Cordialement,
0
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020
17 févr. 2020 à 15:53
Bonjour,

Merci pour ta réponse oui sans le code c'est dur certes mais ce n'est qu'une simple lecture avec FileReader

let reader = new FileReader();
reader.readAsArrayBuffer(document.getElementById('mon_input_file').files[0]);


Je le lis octet par octet car je veux encoder mon fichier via des algorithmes de chiffrement que j'ai écrit à côté de mon programme.

De ce fait je lis octet par octet, je transforme mon octet et j'écris le nouvel octet dans un nouveau fichier, mais la partie qui ralenti le process c'est la lecture et je vois pas comment optimiser ça
0
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 500
17 févr. 2020 à 20:32
Encoder un fichier peut très bien se faire côté backend car encoder un fichier côté frontend c'est risqué comme tout ce qui est traité côté front car modifiable, contournable.

Ca serait bien plus performant d'uploader le fichier en brut et de le chiffrer par PHP une fois sur le serveur.
0
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020 > cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021
18 févr. 2020 à 13:55
Il n'est pas question de sécurité car je ne traite pas le fichier par la suite, je ne le stock même pas

J'envoie mon fichier au js il encore et je le fait télécharger directement

Donc pas besoin de PHP
0
de1irium Messages postés 9 Date d'inscription dimanche 19 janvier 2020 Statut Membre Dernière intervention 18 février 2020 2
18 févr. 2020 à 16:33
Il existe Blob.slice() dont File hérite qui permet de découper un fichier, mais JavaScript étant de nature mono-thread, je doute que vous en retiriez un quelqueconque gain de performance nativement. Je vous conseille de voir au sujet des Web Workers qui permettent le travail en parallèle. Pour des raisons de sécurité cependant, Chrome et Opera les bloquent en local via file:// ; vous devez alors utiliser un véritable serveur http, facilement montable avec Node.js. Dès lors, il s'agirait en effet de découper le fichier en parties, les identifier puis lancer un thread qui lit et transforme chaque partie dans un nouveau Worker. Rassembler ensuite les parties selon l'identifiant. Voyez en introduction : https://developer.mozilla.org/fr/docs/Web/API/Web_Workers_API/Utilisation_des_web_workers
Bon succès,
0
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020
18 févr. 2020 à 17:54
Merci pour votre réponse, les Web Workers semblent être ce dont j'ai besoin !
Je vais tester des codes et je mettrai le sujet en résolu avec des exemples

Pour ceux que ça pourrait intéresser j'ai trouvé ceci : https://www.html5rocks.com/en/tutorials/file/filesystem-sync/
0
danieljsessec Messages postés 15 Date d'inscription lundi 17 février 2020 Statut Membre Dernière intervention 25 février 2020
20 févr. 2020 à 15:20
Bonjour à tous,

Au final je n'avais pas besoin d'optimiser la lecture mais plutôt mon système d'encodage.

A+
0