Advertisement
MatiasVighi

firmUpdater

May 29th, 2025
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express = require('express');
  2. const multer = require('multer');
  3. const path = require('path');
  4. const fs = require('fs');
  5. const archiver = require('archiver');
  6. const { spawn } = require('child_process');
  7. const { exec } = require('child_process');
  8. const app = express();
  9. const PORT = 82;
  10.  
  11. const uploadProcess = spawn('arduino-cli', ['upload', '--fqbn', 'arduino:avr:uno', 'sketch.ino'], {
  12.   shell: true, // Usa el shell configurado
  13.   stdio: 'inherit',
  14.   env: process.env // Hereda todas las variables de entorno
  15. });
  16.  
  17. app.use(express.static(path.join(__dirname, 'public')));
  18.  
  19. app.use(express.urlencoded({ extended: true }));
  20. app.use(express.json());
  21.  
  22. // Configuración de Multer (archivos temporales primero)
  23. const storage = multer.diskStorage({
  24.     destination: function (req, file, cb) {
  25.         const tipo = req.body.tipo;
  26.         const dir = `uploads/${tipo}s`; // ej: uploads/firms
  27.         cb(null, dir);
  28.     },
  29.     filename: function (req, file, cb) {
  30.         cb(null, file.originalname);
  31.     }
  32. });
  33.  
  34. const upload = multer({ storage: multer.memoryStorage() });
  35. // Subida de archivos (firm, imagen, script)
  36. app.post('/upload/:tipo', upload.single('file'), (req, res) => {
  37.  
  38.  
  39.     const tipo = req.params.tipo;
  40.     const archivo = req.file;
  41.  
  42.     // Validaciones
  43.     if (!archivo) {
  44.         console.error("No se recibió archivo.");
  45.         return res.status(400).send("No se recibió archivo.");
  46.     }
  47.  
  48.     console.log("Archivo recibido:", archivo.originalname);
  49.     console.log("Tipo de archivo:", tipo);
  50.  
  51.     const rutaDestino = path.join(__dirname, 'uploads', tipo);
  52.  
  53.     // Asegura que la carpeta existe
  54.     if (!fs.existsSync(rutaDestino)) {
  55.         console.log("Creando carpeta:", rutaDestino);
  56.         fs.mkdirSync(rutaDestino, { recursive: true });
  57.     }
  58.  
  59.     const rutaFinal = path.join(rutaDestino, archivo.originalname);
  60.  
  61.     fs.writeFile(rutaFinal, archivo.buffer, (err) => {
  62.         if (err) {
  63.             console.error("Error guardando el archivo:", err);
  64.             return res.status(500).send("Error al guardar el archivo.");
  65.         }
  66.  
  67.         console.log("Archivo guardado en:", rutaFinal);
  68.         res.redirect('/');
  69.     });
  70.  
  71.         exec(`chmod -R 777 ${rutaDestino}`, (error, stdout, stderr) => {
  72.  
  73. // Descargar archivos de /descargas como ZIP
  74.  
  75.  
  76.  
  77.  
  78.  
  79. app.get('/descargar', (req, res) => {
  80.     const archive = archiver('zip', {
  81.         zlib: { level: 9 } // compresión máxima
  82.     });
  83.  
  84.     // Nombre del archivo descargado
  85.     res.attachment('descargas.zip');
  86.  
  87.     // Manejo de errores
  88.     archive.on('error', err => {
  89.         console.error('Error al comprimir:', err);
  90.         res.status(500).send({ error: 'Error al generar el ZIP' });
  91.     });
  92.  
  93.     // Cierre del stream correctamente
  94.     archive.pipe(res);
  95.     archive.directory('descargas/', false);
  96.     archive.finalize();
  97. });
  98.  
  99.  
  100.  
  101.  
  102. app.listen(PORT, () => {
  103.     console.log(`Servidor corriendo en http://localhost:${PORT}`);
  104. });
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement