webui/server.js
2025-10-02 10:11:08 +03:30

88 lines
2.6 KiB
JavaScript

const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const app = express();
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, uniqueSuffix + '-' + file.originalname);
}
});
const upload = multer({ storage: storage });
app.use(express.static(__dirname));
app.post('/upload', upload.array('files'), (req, res) => {
if (!req.files || req.files.length === 0) {
return res.status(400).send('No files were uploaded.');
}
res.send(`Successfully uploaded ${req.files.length} file(s)!`);
});
app.get('/files', (req, res) => {
const directoryPath = path.join(__dirname, 'uploads');
fs.readdir(directoryPath, (err, files) => {
if (err) {
return res.status(500).send('Unable to scan directory: ' + err);
}
const fileListPromises = files.map(file => {
return new Promise((resolve) => {
const filePath = path.join(directoryPath, file);
fs.stat(filePath, (err, stats) => {
if (err) {
return resolve(null);
}
resolve({
name: file,
path: `/uploads/${file}`,
size: stats.size,
date: stats.mtime
});
});
});
});
Promise.all(fileListPromises).then(fileList => {
res.json(fileList.filter(file => file !== null));
});
});
});
app.get('/uploads/:filename', (req, res) => {
const filePath = path.join(__dirname, 'uploads', req.params.filename);
res.sendFile(filePath, err => {
if (err) {
res.status(404).send('File not found');
}
});
});
app.get('/download/:filename', (req, res) => {
const filePath = path.join(__dirname, 'uploads', req.params.filename);
res.download(filePath, err => {
if (err) {
res.status(404).send('File not found');
}
});
});
app.delete('/delete/:filename', (req, res) => {
const filePath = path.join(__dirname, 'uploads', req.params.filename);
fs.unlink(filePath, err => {
if (err) {
return res.status(404).send('File not found');
}
res.send('File deleted successfully');
});
});
app.listen(3000, () => {
console.log('[*] Server is running on http://localhost:3000');
});