diff --git a/src/app/api/analyze/route.ts b/src/app/api/analyze/route.ts index bf863fd..3a4849e 100644 --- a/src/app/api/analyze/route.ts +++ b/src/app/api/analyze/route.ts @@ -7,15 +7,23 @@ import { processAnimalImage } from '../../../services/animalProcessingService' export async function POST(req: NextRequest): Promise { try { const formData = await req.formData() - const imageFile = formData.get('image') as File + const imageFile = formData.get('image') - if (!imageFile) { + // Robust type checking + if (!imageFile || !(imageFile instanceof File)) { return NextResponse.json( - { error: 'No image provided' }, + { error: 'No valid image provided' }, { status: 400 } ) } + // Log file details for debugging + console.log('Received file:', { + name: imageFile.name, + type: imageFile.type, + size: imageFile.size + }) + // Convert image to buffer const arrayBuffer = await imageFile.arrayBuffer() const buffer = Buffer.from(arrayBuffer) @@ -42,7 +50,7 @@ export async function POST(req: NextRequest): Promise { buffer, visionResult.description, visionResult.rawResponse, - imageFile.name + imageFile.name ).catch(console.error) } diff --git a/src/services/googleVisionService.ts b/src/services/googleVisionService.ts index 019aa3a..f609607 100644 --- a/src/services/googleVisionService.ts +++ b/src/services/googleVisionService.ts @@ -27,19 +27,44 @@ export async function analyzeImage(imageBuffer: Buffer, filename: string): Promi // Create file from buffer using Blob const blob = new Blob([imageBuffer], { type: 'image/jpeg' }) + + // Detailed logging for debugging + console.log('Analyzing image:', { + filename, + bufferLength: imageBuffer.length, + blobSize: blob.size, + blobType: blob.type + }) + formData.append('image', blob, filename) + // Log FormData contents (if possible) + for (const [key, value] of formData.entries()) { + console.log('FormData entry:', key, value) + } + const response = await fetch('/api/analyze', { method: 'POST', body: formData }) + // Log full response for debugging + const responseText = await response.text() + console.log('Raw response:', responseText) + if (!response.ok) { - const error = await response.json() - throw new Error(error.error || 'Failed to analyze image') + try { + const errorData = JSON.parse(responseText) + throw new Error(errorData.error || 'Failed to analyze image') + } catch { + throw new Error(`HTTP error ${response.status}: ${responseText}`) + } } - return await response.json() + // Parse response + const result = JSON.parse(responseText) + return result + } catch (error) { console.error('Vision analysis error:', error) return {