Got it to work. For anyone encountering this problem heres a sample of the code:
zipAndSaveEmojis.js
import axios from "axios";
import JSZip from "jszip";
import { saveAs } from "file-saver";
const b64toBlob = (b64Data, contentType = "", sliceSize = 512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: contentType });
return blob;
};
const zipAndSaveEmojis = async emojis => {
const zip = new JSZip();
let downloadedEmojis;
try {
const res = await axios({
method: "post",
url: "http://localhost:5000/getEmojis",
data: { emojis }
});
downloadedEmojis = res.data.map(emoji => {
return {
data: b64toBlob(emoji.base64),
name: emoji.name
};
});
} catch (err) {
console.error(err);
}
downloadedEmojis.map(emoji => zip.file(emoji.name, emoji.data));
const zipped = await zip.generateAsync({ type: "blob" });
saveAs(zipped, "emojis.zip");
};
export { zipAndSaveEmojis };
server.js
// import express (after npm install express)
const express = require("express");
const cors = require("cors");
const axios = require("axios");
// create new express app and save it as "app"
const app = express();
app.use(express.json({ extended: true }));
app.use(cors({ origin: "http://localhost:3000" }));
// server configuration
const PORT = 5000;
// create a route for the app
app.post("/getEmojis", async (req, res) => {
let emojis = [];
for (var emoji of req.body.emojis) {
const res = await axios(emoji.url, {
responseType: "arraybuffer"
});
emojis.push({
base64: Buffer.from(res.data, "binary").toString("base64"),
name: emoji.name
});
}
return res.send(emojis);
});
// make the server listen to requests
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});