This is my server side code.
const express = require('express');
const cors = require('cors');
const multer = require('multer');
const fs = require('fs');
const {Storage} = require('megajs');
const archiver = require('archiver');
require('dotenv').config();
const app = express();
app.use(cors());
// ENVs
const port = process.env.PORT || 5000;
const megaUser = process.env.MEGA_USER;
const megaPassword = process.env.MEGA_PASSWORD;
const megaFolderName = process.env.MEGA_FOLDERNAME;
// App Interface
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.get('/:key', (req, res) => {
res.send(`Hello ${req.params.key}`);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
// Mega storage Setup
let megaStorage;
const storage = new Storage({
email: megaUser,
password: megaPassword,
userAgent: 'myApp/1.0'
});
storage.on('ready', async () => {
console.log("MEGA connected");
megaStorage = storage.root.children.find(folder => folder.name === megaFolderName);
if (!megaStorage) {
console.error("Upload folder not found");
}
else {
console.log("Upload folder found:", megaStorage.name);
megaStorage.children?.map(folders => folders.children?.map(files => console.log(files.name)));
}
});
storage.on('error', (err) => {
console.error("MEGA connection error:", err);
});
/* REST Api */
// Upload
const upload = multer({ storage: multer.memoryStorage() });
app.post('/api/upload/:key', upload.array('files'), async (req, res) => {
try {
if (!megaStorage) {
return res.status(500).send('MEGA storage not initialized');
}
const key = req.params.key;
let folder = megaStorage.children.find(folder => folder.name === key);
if (!folder) {
folder = await megaStorage.mkdir({ name: key });
}
for (const file of req.files) {
const result = await folder.upload({
name: file.originalname,
size: file.size,
data: file.buffer
}).complete;
console.log(result);
}
res.status(200).send('Files uploaded successfully');
}
catch (err) {
console.error('Error uploading files:', err);
res.status(500).send('Error uploading files');
}
});
This is my endpoint for uploading the files. This endpoint created a new folder in the name of key received and upload the received files to the folder using the megajs.
const upload = multer({ storage: multer.memoryStorage() });
app.post('/api/upload/:key', upload.array('files'), async (req, res) => {
try {
if (!megaStorage) {
return res.status(500).send('MEGA storage not initialized');
}
const key = req.params.key;
let folder = megaStorage.children.find(folder => folder.name === key);
if (!folder) {
folder = await megaStorage.mkdir({ name: key });
}
for (const file of req.files) {
const result = await folder.upload({
name: file.originalname,
size: file.size,
data: file.buffer
}).complete;
console.log(result);
}
res.status(200).send('Files uploaded successfully');
}
catch (err) {
console.error('Error uploading files:', err);
res.status(500).send('Error uploading files');
}
});
But when I request from the client side the page just loading forever. It’s not showing any errors and a new folder is created successfully in Mega but the received files are not uploaded to it. Can someone point me what is the problem?
for (const file of req.files) {
const result = await folder.upload({
name: file.originalname,
size: file.size,
data: file.buffer
}).complete;
console.log(result);
}
This is the part which uploads the files to mega folder and it’s not working. Can anyone tell me to what to do?