2017-09-25 1 views
0

J'ai un tableau de chaînes qui devraient être écrites dans un fichier .txt. J'ai également besoin de compresser le fichier .txt résultant au format .zip en utilisant JSZip. Du coté client, j'ai pu générer un blob 'text/plain' en utilisant ce tableau de chaînes puis j'ai compressé ce blob au format .zip en utilisant JSZip. J'ai besoin de faire la même chose côté serveur en utilisant node.js, mais j'ai réalisé que Blob n'est pas disponible dans node.js. J'ai essayé d'utiliser 'Buffer' au lieu de Blob, et j'ai obtenu un fichier binaire compressé en .zip; Je suis un débutant avec node.js et je ne pouvais pas comprendre les concepts de Buffer. Puis-je créer un blob dans node.js? ou Puis-je effectuer les mêmes opérations avec node.js Buffer?Comment générer un fichier zip en utilisant le contenu du buffer dans node.js en utilisant JSZip?

Du côté client, je peux générer le fichier zip à partir du contenu Blob comme celui-ci,

//stringsArray is an array of strings 
var blob = new Blob(stringsArray, { type: "text/plain" }); 

var zip = new JSZip(); 
zip.file('file.txt' , blob); 

zip.generateAsync({ type: 'blob', compression: 'DEFLATE' }) 
.then(function(zipFile){ 

    //do something with zipFile 

}, function(error){ 

    console.log('Error in compression'); 

}); 

Comment puis-je faire la même chose en utilisant Node.js?

+1

Ce code devrait fonctionner tel quel. Vérifiez peut-être la documentation de JSZip s'ils ont une méthode différente pour Node. –

+0

@BrahmaDev, j'ai l'erreur 'Blob is not defined' dans node.js – HariV

+1

Désolé pour cela, vous devez utiliser Buffer. La documentation serait un bon point de recherche autour de ceci: https://stuk.github.io/jszip/documentation/api_jszip/generate_async.html –

Répondre

0

J'ai trouvé une solution pour cela. Dans mon code, je n'utilisais pas la méthode appropriée pour convertir le tableau de chaînes en buffer node.js (je n'étais pas capable de compresser le buffer en utilisant JSZip car le buffer était incorrect). J'ai essayé le code suivant, mais il m'a donné un tampon incorrect,

//stringsArray is an array of strings 
var buffer = Buffer.from(stringsArray); 

La bonne façon est que, nous devons convertir chaque chaîne de tampon d'abord, puis créer un nouveau tampon en ajoutant tous ces tampons sous. J'ai créé un constructeur de tampon personnalisé qui va construire un tampon node.js en y ajoutant des chaînes. Voici la nouvelle méthode que j'ai essayée, et cela a fonctionné pour moi. En sortie, j'ai récupéré le fichier zip (test.zip) et le fichier test.txt à l'intérieur de celui-ci. Le fichier test.txt dans le fichier zip contient les mots suivants: 'hello world. \ NIl s'agit d'un test.'.

Merci @BrahmaDev pour passer du temps à regarder dans ma question :)