sysrot-hub
Version:
CLI de nueva generación para proyectos Next.js 14+ con IA multi-modelo, Web3 integration, internacionalización completa y roadmap realista 2025-2026
69 lines (59 loc) • 2.07 kB
text/typescript
import { NextApiRequest, NextApiResponse } from "next";
import { v2 as cloudinary } from "cloudinary";
import formidable from "formidable";
import fs from "fs";
// Configurar Cloudinary
cloudinary.config({
cloud_name: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
// Deshabilitar el parsing de body por defecto
export const config = {
api: {
bodyParser: false,
},
};
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== "POST") {
return res.status(405).json({ error: "Método no permitido" });
}
try {
// Parsear form data con formidable
const form = new formidable.IncomingForm();
const parseForm = () => {
return new Promise<{fields: formidable.Fields, files: formidable.Files}>((resolve, reject) => {
form.parse(req, (err, fields, files) => {
if (err) reject(err);
resolve({ fields, files });
});
});
};
const { files } = await parseForm();
const uploadedFile = files.file as formidable.File;
if (!uploadedFile) {
return res.status(400).json({ error: "No se ha proporcionado ningún archivo" });
}
// Leer el archivo
const fileData = fs.readFileSync(uploadedFile.filepath);
const fileBase64 = fileData.toString("base64");
const fileUri = `data:${uploadedFile.mimetype};base64,${fileBase64}`;
// Subir a Cloudinary
const uploadResult = await new Promise((resolve, reject) => {
cloudinary.uploader.upload(
fileUri,
{
folder: "next-app",
},
(error, result) => {
if (error) reject(error);
else resolve(result);
}
);
});
return res.status(200).json(uploadResult);
} catch (error) {
console.error("Error al subir a Cloudinary:", error);
return res.status(500).json({ error: "Error al procesar la solicitud" });
}
}