48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
|
async function downloadFilesWithCallback(processFileCallback) {
|
||
|
const fileInput = document.querySelector('input[type="file"]');
|
||
|
const files = fileInput.files;
|
||
|
|
||
|
const zipThreshold = 4;
|
||
|
const zipFiles = files.length > zipThreshold;
|
||
|
|
||
|
let jszip = null;
|
||
|
if (zipFiles) {
|
||
|
jszip = new JSZip();
|
||
|
}
|
||
|
|
||
|
const promises = Array.from(files).map(async file => {
|
||
|
const { processedData, fileName } = await processFileCallback(file);
|
||
|
|
||
|
if (zipFiles) {
|
||
|
jszip.file(fileName, processedData);
|
||
|
} else {
|
||
|
const url = URL.createObjectURL(processedData);
|
||
|
const downloadOption = localStorage.getItem('downloadOption');
|
||
|
|
||
|
if (downloadOption === 'sameWindow') {
|
||
|
window.location.href = url;
|
||
|
} else if (downloadOption === 'newWindow') {
|
||
|
window.open(url, '_blank');
|
||
|
} else {
|
||
|
const downloadLink = document.createElement('a');
|
||
|
downloadLink.href = url;
|
||
|
downloadLink.download = fileName;
|
||
|
downloadLink.click();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
await Promise.all(promises);
|
||
|
|
||
|
if (zipFiles) {
|
||
|
const content = await jszip.generateAsync({ type: "blob" });
|
||
|
const url = URL.createObjectURL(content);
|
||
|
const a = document.createElement('a');
|
||
|
a.href = url;
|
||
|
a.download = "files.zip";
|
||
|
document.body.appendChild(a);
|
||
|
a.click();
|
||
|
a.remove();
|
||
|
}
|
||
|
}
|