Skip to content

Instantly share code, notes, and snippets.

@sticks-stuff
Created December 9, 2020 01:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sticks-stuff/42b2f27441113dd26a92818cab38c286 to your computer and use it in GitHub Desktop.
Save sticks-stuff/42b2f27441113dd26a92818cab38c286 to your computer and use it in GitHub Desktop.
Requires jszip and FileSaver and an API key
var files = [];
var counter = 0;
async function getFileFromUrl(url, filename, callback){
const response = await fetch(url);
const data = await response.blob();
blobToBase64(data, function (dataURL) { callback(dataURL, url, filename); })
console.log(data);
}
function createArchive(files){
// Use jszip
var zip = new JSZip();
getJSON('https://www.googleapis.com/drive/v2/files/' + folderID + '?key=' + apiKey, function(err, data) {
if (err !== null) {
alert('Something went wrong: ' + err);
} else {
var title = zip.folder(data.title);
for (var i=0; i<files.length; i++) {
var commaIdx = files[i].data.indexOf(",");
title.file(files[i].filename, files[i].data.slice(commaIdx + 1), {base64: true});
}
zip.generateAsync({type:"blob"}).then(function(file){
saveAs(file, data.title + ".zip");
})
}
});
}
var blobToBase64 = function(blob, callback) {
var reader = new FileReader();
reader.onload = function() {
var dataUrl = reader.result;
var base64 = dataUrl.split(',')[1];
callback(base64);
};
reader.readAsDataURL(blob);
};
var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
var status = xhr.status;
if (status === 200) {
callback(null, xhr.response);
} else if (status === 403){
console.log(xhr.response.error);
}else {
callback(status, xhr.response);
}
};
xhr.send();
};
var folderID = '1D_wU1rI0cySkk5B_Au-frRdmSi901itK';
var apiKey = 'foo';
getJSON('https://www.googleapis.com/drive/v2/files?q=%27' + folderID + '%27+in+parents&key=' + apiKey, function(err, data) {
if (err !== null) {
alert('Something went wrong: ' + err);
} else {
for (var i = 0; i < data.items.length; i++) {
console.log(data.items[i].webContentLink)
getFileFromUrl("https://cors-anywhere.herokuapp.com/" + data.items[i].downloadUrl, data.items[i].title, function (base64Img, url, filename) {
files.push({
url: url,
data: base64Img,
filename: filename,
});
counter++;
console.log("counter" + counter);
console.log(files);
console.log(data.items.length);
if (counter >= (data.items.length)) {
createArchive(files);
}
});
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment