./kaisetsu-app/src/app/api/upload/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { storage } from '@/lib/storage';
export async function POST(request: NextRequest) {
try {
const formData = await request.formData();
const file = formData.get('video') as File | null;
if (!file) {
return NextResponse.json({ error: 'No video file provided' }, { status: 400 });
}
const bytes = await file.arrayBuffer();
const buffer = Buffer.from(bytes);
let mimeType = file.type;
if (!mimeType || mimeType === 'application/octet-stream') {
const ext = file.name.toLowerCase().split('.').pop();
const mimeTypes: Record<string, string> = {
mp4: 'video/mp4',
mov: 'video/quicktime',
avi: 'video/x-msvideo',
mkv: 'video/x-matroska',
webm: 'video/webm',
m4v: 'video/x-m4v',
};
mimeType = mimeTypes[ext || ''] || 'video/mp4';
}
const gcsUri = await storage.saveVideo(buffer, file.name, mimeType);
console.log(`Uploaded to ${gcsUri}`);
return NextResponse.json({ gcsUri });
} catch (error) {
console.error('Upload error:', error);
return NextResponse.json(
{ error: error instanceof Error ? error.message : 'Upload failed' },
{ status: 500 }
);
}
}