2017-09-18 3 views
0
const reader = response.body.getReader(); 
     reader.read() 
      .then(({ done, value }) => { 
       var link = document.createElement("a"); 
       value = window.btoa(value) //<-tried with and without 
       link.download = "test.pdf"; 
       link.href = 'data:application/pdf;base64,'+value 
       link.click(); 
       // console.log(window.atob(value)) 
      }) 

Ceci enregistre juste un fichier pdf qui n'a rien dedans/est illisible.Enregistrer le flux de données reçu comme unit8array en tant que pdf vers le système de fichiers sur le frontal

valeur dans le rappel est unicode pour un fichier pdf lu dans un fichier de données donc c'est juste un tas de nombres dans un unit8array. J'ai essayé de le convertir en base64 et de le télécharger via un uri de données mais je n'ai pas eu de chance.

C'est dans une application électronique BTW

modifier:

Quand je reçois les données du back-end, la demande, il montre que unicode, mais la réponse me donne comme un flux lisible. Je suis sûr à 100% que je serais capable d'analyser l'Unicode et d'en enregistrer un fichier PDF mais je ne sais pas comment obtenir le formulaire Unicode à partir du flux lisible donné.

Répondre

1

Essayez de donner un nom au fichier:

link.name = "file.pdf"; 

puis en utilisant la base64 pour faire une URI données. Si cela ne fonctionne pas, essayez de faire vos données URI comme ceci:

'data:application/octet-stream;charset=utf-16le;base64,' + value; 

Il pourrait être utile de déboguer le dataURI si possible, les données que vous obtenez pourrait être corrompu pour commencer qui vous fera courir après ta queue.

Vous pouvez également essayer de convertir le Uint8Array à un objet de fichier:

var arr = []; 
var arr.push(value); 
var pdf = new File(arr, 'test.pdf', {type: 'application/pdf'}); 

Et puis attacher à un objet que FormData et l'afficher sur votre serveur. Edit * oops ne voyait pas que vous faisiez cela avec des électrons, donc je ne suis pas sûr que ce qui précède s'applique mais cela peut être utile. Bonne chance!

+0

merci pour l'aide, Malheureusement, cela n'a pas fait de différence, je reçois toujours un fichier vide lorsque j'essaie d'ouvrir le pdf. Ce qui est bizarre, c'est que l'erreur est "Le type de fichier texte brut (texte/plain) n'est pas supporté", quand je le spécifie comme application/pdf dans les données uri –

+0

Pouvez-vous me montrer l'URI de données complète? Avez-vous essayé d'ajouter manuellement ".pdf" au nom du fichier téléchargé? Cela semble stupide, mais ça vaut le coup –

+0

Im en fait pas sûr à 100% que je peux en raison de possibles (très codés) des informations sensibles; mais je peux dire que le décodage de la base64 me donne le flux de données d'origine (par exemple: 34,12,23,4,65,43 etc) Mais je pense que je voudrais obtenir l'unicode ne le ferais pas? C'est la première fois que je fais face à ce genre de chose, alors je suis désolé si je suis induit en erreur quelque part. De plus, ajouter .pdf n'a rien changé car il était déjà là à cause de link.download = "test.pdf" –