Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require('express');
- const multer = require('multer');
- const path = require('path');
- const fs = require('fs');
- const archiver = require('archiver');
- const { spawn } = require('child_process');
- const { exec } = require('child_process');
- const app = express();
- const PORT = 82;
- const uploadProcess = spawn('arduino-cli', ['upload', '--fqbn', 'arduino:avr:uno', 'sketch.ino'], {
- shell: true, // Usa el shell configurado
- stdio: 'inherit',
- env: process.env // Hereda todas las variables de entorno
- });
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(express.urlencoded({ extended: true }));
- app.use(express.json());
- // Configuración de Multer (archivos temporales primero)
- const storage = multer.diskStorage({
- destination: function (req, file, cb) {
- const tipo = req.body.tipo;
- const dir = `uploads/${tipo}s`; // ej: uploads/firms
- cb(null, dir);
- },
- filename: function (req, file, cb) {
- cb(null, file.originalname);
- }
- });
- const upload = multer({ storage: multer.memoryStorage() });
- // Subida de archivos (firm, imagen, script)
- app.post('/upload/:tipo', upload.single('file'), (req, res) => {
- const tipo = req.params.tipo;
- const archivo = req.file;
- // Validaciones
- if (!archivo) {
- console.error("No se recibió archivo.");
- return res.status(400).send("No se recibió archivo.");
- }
- console.log("Archivo recibido:", archivo.originalname);
- console.log("Tipo de archivo:", tipo);
- const rutaDestino = path.join(__dirname, 'uploads', tipo);
- // Asegura que la carpeta existe
- if (!fs.existsSync(rutaDestino)) {
- console.log("Creando carpeta:", rutaDestino);
- fs.mkdirSync(rutaDestino, { recursive: true });
- }
- const rutaFinal = path.join(rutaDestino, archivo.originalname);
- fs.writeFile(rutaFinal, archivo.buffer, (err) => {
- if (err) {
- console.error("Error guardando el archivo:", err);
- return res.status(500).send("Error al guardar el archivo.");
- }
- console.log("Archivo guardado en:", rutaFinal);
- res.redirect('/');
- });
- exec(`chmod -R 777 ${rutaDestino}`, (error, stdout, stderr) => {
- // Descargar archivos de /descargas como ZIP
- app.get('/descargar', (req, res) => {
- const archive = archiver('zip', {
- zlib: { level: 9 } // compresión máxima
- });
- // Nombre del archivo descargado
- res.attachment('descargas.zip');
- // Manejo de errores
- archive.on('error', err => {
- console.error('Error al comprimir:', err);
- res.status(500).send({ error: 'Error al generar el ZIP' });
- });
- // Cierre del stream correctamente
- archive.pipe(res);
- archive.directory('descargas/', false);
- archive.finalize();
- });
- app.listen(PORT, () => {
- console.log(`Servidor corriendo en http://localhost:${PORT}`);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement