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