-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
95 lines (80 loc) · 3.65 KB
/
index.js
File metadata and controls
95 lines (80 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// 1. Importar las librerías necesarias
// JupiterAPI library
const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
// 2. Inicializar la aplicación Express
const app = express();
const port = 3000;
// 3. Asegurarse de que el directorio 'uploads' exista
const uploadDir = 'uploads/';
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir);
}
// 4. Configuración de Multer (Manejo de archivos)
// Usamos diskStorage para tener control total sobre dónde y cómo se guardan los archivos.
const storage = multer.diskStorage({
// Destino: la carpeta 'uploads' que creamos.
destination: function (req, file, cb) {
cb(null, uploadDir);
},
// Nombre del archivo: mantenemos el nombre original con un timestamp para evitar colisiones.
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + file.originalname);
}
});
// Inicializamos multer con la configuración de almacenamiento.
const upload = multer({ storage: storage });
// 5. Middlewares de Express
// Para parsear (interpretar) cuerpos de solicitud JSON
app.use(express.json());
// Para parsear cuerpos de solicitud de formularios (para datos de texto)
app.use(express.urlencoded({ extended: true }));
// Middleware para servir archivos estáticos (nuestras imágenes subidas)
// Esto nos permitirá ver las imágenes desde el navegador en http://localhost:3000/uploads/nombre-del-archivo.jpg
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
// -----------------------------------------------------------------
// 6. Definición de la Ruta (Endpoint)
// -----------------------------------------------------------------
// Esta será la ruta que recibirá los datos: POST /api/upload
// Usamos 'upload.single("imagen")' como middleware.
// - 'upload.single' significa que esperamos un solo archivo.
// - '"imagen"' es el *nombre del campo* (key) que el cliente debe usar en el formulario para enviar el archivo.
app.post('/api/upload', upload.single('imagen'), (req, res) => {
// Los datos de texto (si se envían como multipart/form-data) estarán en 'req.body'
const datosDeTexto = req.body;
// Los datos del archivo (si se subió uno) estarán en 'req.file'
const datosDeArchivo = req.file;
// --- Verificación de errores ---
if (!datosDeArchivo) {
// Si no se subió ningún archivo, enviamos un error 400 (Bad Request)
return res.status(400).json({
error: "No se proporcionó ningún archivo."
});
}
// --- Respuesta Exitosa (application/json) ---
// Si todo salió bien, enviamos una respuesta JSON.
console.log('Datos de texto recibidos:', datosDeTexto);
console.log('Datos de archivo recibidos:', datosDeArchivo);
res.status(200).json({
mensaje: "¡Archivo y texto recibidos con éxito!",
// Devolvemos la información del texto recibido
textoRecibido: datosDeTexto,
// Devolvemos la información del archivo guardado
archivoGuardado: {
nombreOriginal: datosDeArchivo.originalname,
nombreEnServidor: datosDeArchivo.filename,
tamaño: datosDeArchivo.size,
rutaAcceso: `/uploads/${datosDeArchivo.filename}` // Ruta para acceder al archivo
}
});
});
// 7. Ruta de Bienvenida (GET /)
app.get('/', (req, res) => {
res.send('Servidor API funcionando. Envía un POST a /api/upload para subir archivos.');
});
// 8. Iniciar el servidor
app.listen(port, () => {
console.log(`Servidor escuchando en http://localhost:${port}`);
});