2016-12-15 1 views

Antwort

2

Die Lösung ist eine direkte Liste der Dateien in xlsx enthalten sind, zu komprimieren, aus irgendeinem Grund, wenn wir versuchen, den Ordner zu komprimieren die Datei beschädigt ist.

Der Code sieht wie folgt aus, wenn Sie JSZIP verwenden

var fs = require('fs'); 
var JSZip = require("jszip"); 
var zip = new JSZip(); 
var file = []; 
file.push("_rels/.rels"); 
file.push("docProps/core.xml"); 
file.push("docProps/app.xml"); 
file.push("docProps/custom.xml"); 
file.push("[Content_Types].xml"); 
file.push("xl/_rels/workbook.xml.rels"); 
file.push("xl/styles.xml"); 
file.push("xl/pivotTables/_rels/pivotTable3.xml.rels"); 
file.push("xl/pivotTables/_rels/pivotTable1.xml.rels"); 
file.push("xl/pivotTables/_rels/pivotTable2.xml.rels"); 
file.push("xl/pivotTables/pivotTable3.xml"); 
file.push("xl/pivotTables/pivotTable1.xml"); 
file.push("xl/pivotTables/pivotTable2.xml"); 
file.push("xl/workbook.xml"); 
file.push("xl/worksheets/_rels/sheet2.xml.rels"); 
file.push("xl/worksheets/_rels/sheet1.xml.rels"); 
file.push("xl/worksheets/_rels/sheet3.xml.rels"); 
file.push("xl/worksheets/sheet4.xml"); 
file.push("xl/worksheets/sheet1.xml"); 
file.push("xl/worksheets/sheet3.xml"); 
file.push("xl/worksheets/sheet2.xml"); 
file.push("xl/sharedStrings.xml"); 
file.push("xl/pivotCache/_rels/pivotCacheDefinition1.xml.rels"); 
file.push("xl/pivotCache/pivotCacheDefinition1.xml"); 
file.push("xl/pivotCache/pivotCacheRecords1.xml"); 

for (var i = 0; i < file.length; i++) { 
    zip.file(file[i], fs.readFileSync("/home/user/xlsx_FILES/"+file[i])); 
} 

zip.generateAsync({type:"blob"}).then(function(content) { 
    // see FileSaver.js 
    saveAs(content, "yourfile.xlsx"); 
}); 
1

Werfen Sie einen Blick auf archiver, eine Komprimierungsbibliothek für Nodejs. Die docs für die Bibliothek sehen aus wie sie umfassend sind. Die Bibliothek ermöglicht es Ihnen auch, Archive anzuhängen und Streaming-APIs zum Anhängen und Erstellen neuer Archive zu nutzen.

Hier ist ein Beispiel-Snippet aus ihren Dokumenten, das zeigt, wie man die Bibliothek benutzt.

// require modules 
var fs = require('fs'); 
var archiver = require('archiver'); 

// create a file to stream archive data to. 
var output = fs.createWriteStream(__dirname + '/example.zip'); 
var archive = archiver('zip', { 
    store: true // Sets the compression method to STORE. 
}); 

// listen for all archive data to be written 
output.on('close', function() { 
    console.log(archive.pointer() + ' total bytes'); 
    console.log('archiver has been finalized and the output file descriptor has closed.'); 
}); 

// good practice to catch this error explicitly 
archive.on('error', function(err) { 
    throw err; 
}); 

// pipe archive data to the file 
archive.pipe(output); 
+0

Es funktioniert gut für die Massen Kompression, aber bei dem Versuch, zurück zu komprimieren, um die Datei xlsx beschädigt wird. –

+0

Ich frage mich warum? Kannst du deinen Code zum OP hinzufügen? –

+0

Ich fand die Lösung, ich habe es gerade als Antwort gepostet –

Verwandte Themen