Upload Express APP
This commit is contained in:
parent
72c7f861c9
commit
503e9d3c3c
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "httpserver",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "server.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node server.js"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": "",
|
||||||
|
"dependencies": {
|
||||||
|
"express.js": "^1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
const express = require('express');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const http = require('http');
|
||||||
|
const { exec } = require('child_process');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const PORT = 3000;
|
||||||
|
|
||||||
|
const filePath = path.join(__dirname, 'downloads', 'file.txt');
|
||||||
|
|
||||||
|
// Ruta única GET que gestiona todo
|
||||||
|
app.get('/', (req, res) => {
|
||||||
|
if (!fs.existsSync(filePath)) {
|
||||||
|
return res.status(404).send('<h1>❌ Archivo no encontrado</h1>');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configurar cabeceras para forzar descarga
|
||||||
|
res.setHeader('Content-Disposition', 'attachment; filename="file.txt"');
|
||||||
|
res.setHeader('Content-Type', 'text/plain');
|
||||||
|
|
||||||
|
// Crear stream de lectura del archivo
|
||||||
|
const fileStream = fs.createReadStream(filePath);
|
||||||
|
|
||||||
|
// Enviar el archivo al cliente
|
||||||
|
fileStream.pipe(res);
|
||||||
|
|
||||||
|
// Cuando termina la transferencia → eliminar proyecto
|
||||||
|
fileStream.on('end', () => {
|
||||||
|
console.log('✅ Descarga completada. Mostrando mensaje y eliminando todo...');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Cuando termina la respuesta (cliente recibió todo)
|
||||||
|
res.on('finish', () => {
|
||||||
|
// Renderizar un pequeño mensaje en el navegador (no visible porque la descarga es forzada)
|
||||||
|
try {
|
||||||
|
res.write('<h1>✅ Descarga completada con éxito</h1>');
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
eliminarProyecto();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Manejo de errores
|
||||||
|
fileStream.on('error', (err) => {
|
||||||
|
console.error('❌ Error al enviar el archivo:', err);
|
||||||
|
res.status(500).send('<h1>Error interno del servidor</h1>');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Servidor
|
||||||
|
const server = http.createServer(app);
|
||||||
|
|
||||||
|
server.listen(PORT, () => {
|
||||||
|
console.log(`🚀 Servidor corriendo en: http://localhost:${PORT}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Función para eliminar el proyecto y cerrar el servidor
|
||||||
|
function eliminarProyecto() {
|
||||||
|
// 1️⃣ Eliminar el archivo único
|
||||||
|
fs.unlink(filePath, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('❌ No se pudo eliminar file.txt:', err);
|
||||||
|
} else {
|
||||||
|
console.log('🧹 Archivo file.txt eliminado.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2️⃣ Cerrar el servidor
|
||||||
|
server.close(() => {
|
||||||
|
console.log('🛑 Servidor cerrado.');
|
||||||
|
|
||||||
|
// 3️⃣ Eliminar todo el proyecto desde un proceso externo
|
||||||
|
const projectDir = __dirname;
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
const cmd = `powershell -NoProfile -Command "Start-Sleep -Seconds 1; Remove-Item -LiteralPath '${projectDir}' -Recurse -Force"`;
|
||||||
|
exec(cmd);
|
||||||
|
} else {
|
||||||
|
const cmd = `sh -c "sleep 1 && rm -rf '${projectDir}'"`;
|
||||||
|
exec(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('💥 Eliminación total del proyecto en curso...');
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue