Fix media upload logic: generate DB document with magic SEO formatting

This commit is contained in:
Carlos (Almeira) 2026-07-01 18:49:23 -05:00
parent ad31570067
commit df1df8a681
2 changed files with 17 additions and 4 deletions

View File

@ -97,6 +97,10 @@ export async function uploadMediaDocumentServer(formData: FormData) {
const databases = new Databases(client);
const files = formData.getAll('files') as File[];
const tituloBase = formData.get('titulo')?.toString() || '';
const altTextBase = formData.get('alt_text')?.toString() || '';
const descSeo = formData.get('descripcion_seo')?.toString() || '';
if (!files || files.length === 0) {
throw new Error('No se encontraron archivos para subir');
}
@ -107,11 +111,20 @@ export async function uploadMediaDocumentServer(formData: FormData) {
const inputFile = InputFile.fromBuffer(buffer, file.name);
const uploadedFile = await storage.createFile(APPWRITE_ALMEIRA_CONFIG.mediaBucketId, ID.unique(), inputFile);
// Generador mágico de SEO (quitar extensión, guiones, y números finales)
const rawName = file.name.split('.').slice(0, -1).join('.'); // Sin extensión
const cleanName = rawName
.replace(/[-_]/g, ' ') // Cambiar guiones o underscores por espacios
.replace(/\d+$/, '') // Eliminar números al final (foto1 -> foto)
.trim();
const smartTitle = cleanName.charAt(0).toUpperCase() + cleanName.slice(1);
const doc = await databases.createDocument(DATABASE_ID, 'media', ID.unique(), {
file_id: uploadedFile.$id,
bucket_id: APPWRITE_ALMEIRA_CONFIG.mediaBucketId,
titulo: file.name,
alt_text: file.name.split('.')[0],
titulo: tituloBase || smartTitle || file.name,
alt_text: altTextBase || smartTitle || rawName,
descripcion_seo: descSeo,
tipo: file.type.startsWith('image/') ? 'imagen' : 'video'
});
results.push(doc);

View File

@ -3,7 +3,7 @@
import { useState } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { uploadMediaServer } from '@/app/actions/appwrite';
import { uploadMediaDocumentServer } from '@/app/actions/appwrite';
import { UploadCloud, Layers, Plus } from 'lucide-react';
export default function NewMediaPage() {
@ -38,7 +38,7 @@ export default function NewMediaPage() {
try {
// Native Server Action Upload - Bypass browser authentication errors
const res = await uploadMediaServer(formData);
const res = await uploadMediaDocumentServer(formData);
if (res.success) {
router.push('/dashboard/media');