-
-
Save c4software/981661f1f826ad34c2a5dc11070add0f to your computer and use it in GitHub Desktop.
Download multiple files then compress to one zip file using JSZip & JSZip-utils
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var zip = new JSZip(); | |
var count = 0; | |
var zipFilename = "zipFilename.zip"; | |
var urls = [ | |
'http://image-url-1', | |
'http://image-url-2', | |
'http://image-url-3' | |
]; | |
urls.forEach(function(url){ | |
var filename = "filename"; | |
// loading a file and add it in a zip file | |
JSZipUtils.getBinaryContent(url, function (err, data) { | |
if(err) { | |
throw err; // or handle the error | |
} | |
zip.file(filename, data, {binary:true}); | |
count++; | |
if (count == urls.length) { | |
zip.generateAsync({type:'blob'}).then(function(content) { | |
saveAs(content, zipFilename); | |
}); | |
} | |
}); | |
}); |
What is saveAs function? Where it came from?
https://github.com/eligrey/FileSaver.js/
include this in your file after npm i save-as:
import { saveAs } from 'save-as'
Note: each file needs an unique filename, otherwise the zip will contain only one file. Struggled with this for 2 hours lol. also, the filename needs to include the type. For me it is:
zip.file(image+ ".jpg", data, {binary:true});
+1
I have also struggled with file name being redundant and i ended up with a zip with one file, i suggest adding something like self.crypto.randomUUID();
https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID to ensure uniqueness!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
in development mode you could add this to the beginning of the url
https://cors-anywhere.herokuapp.com/
examplehttps://cors-anywhere.herokuapp.com/https://myurl.com/myImage.com
but for production environment you should configure your server to accept this kind of connections with
Access-Control-Allow-Origin
from the server side.