fullstuckdev's picture
Upload 25 files
2341446 verified
raw
history blame
2.16 kB
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf"
import { DocxLoader } from "@langchain/community/document_loaders/fs/docx"
import { NextResponse } from 'next/server'
import { writeFile } from 'fs/promises'
import { join } from 'path'
import { Document } from '@langchain/core/documents'
import { mkdir } from 'fs/promises'
export async function POST(request: Request) {
try {
const formData = await request.formData()
const files = formData.getAll('files') as File[]
if (!files?.length) {
return NextResponse.json(
{ error: 'No files uploaded' },
{ status: 400 }
)
}
// Ensure temp directory exists
const tempDir = '/tmp'
try {
await mkdir(tempDir, { recursive: true })
} catch (err) {
console.error('Error creating temp directory:', err)
}
const documents: { text: string }[] = []
for (const file of files) {
try {
const bytes = await file.arrayBuffer()
const buffer = Buffer.from(bytes)
const tempPath = join(tempDir, `${Date.now()}-${file.name}`)
await writeFile(tempPath, buffer)
console.log('File written to:', tempPath)
let docs: Document[] = []
if (file.name.toLowerCase().endsWith('.pdf')) {
const loader = new PDFLoader(tempPath)
docs = await loader.load()
} else if (file.name.toLowerCase().endsWith('.docx')) {
const loader = new DocxLoader(tempPath)
docs = await loader.load()
}
documents.push(...docs.map(doc => ({
text: doc.pageContent
.replace(/\s+/g, ' ')
.trim()
})))
} catch (err) {
console.error(`Error processing file ${file.name}:`, err)
}
}
if (documents.length === 0) {
return NextResponse.json(
{ error: 'No documents could be processed' },
{ status: 400 }
)
}
return NextResponse.json({ documents })
} catch (error) {
console.error('Upload error:', error)
return NextResponse.json(
{ error: 'Failed to process files' },
{ status: 500 }
)
}
}