tgreen
tgreen

Reputation: 1926

JSZip extract file objects

I am extracting a zip file with JSZip by doing the following:

jszip.loadAsync(zipFile)
['then'](function(zip) {
    return bluebird.map(Object.keys(zip.files), function (filename) {
        // converts the compressed file to a string of its contents
        return zip.files[filename].async('string').then(function (fileData) {
            // fileData is a string of the contents
        })
    })
})

However, the output of this extraction is an array of strings of the file contents. I was wondering if it was possible to get an array of file objects as the output instead because I need the file object later.

I have tried to do

new File(fileData.split('\n'), filename)

But it loses the original file formatting.

Any suggestions?

Upvotes: 3

Views: 6503

Answers (1)

David Duponchel
David Duponchel

Reputation: 4059

The File constructor takes a list of BufferSource (ArrayBuffer, Uint8Array, etc), Blob or string. If you split the content on \n, you will remove these \n. File will then concatenate each string without re-adding the new lines.

Use a blob instead:

return zip.files[filename].async('blob').then(function (fileData) {
    return new File([fileData], filename);
})

Upvotes: 10

Related Questions