(client: DocumentEngineClient, req: Request, res: Response)
| 67 | * File upload handler |
| 68 | */ |
| 69 | export async function uploadHandler(client: DocumentEngineClient, req: Request, res: Response) { |
| 70 | try { |
| 71 | if (!req.files || req.files.length === 0) { |
| 72 | return res.status(400).send(errorTemplate('No files were uploaded.')); |
| 73 | } |
| 74 | |
| 75 | const results = []; |
| 76 | const files = Array.isArray(req.files) ? req.files : Object.values(req.files).flat(); |
| 77 | |
| 78 | for (const file of files) { |
| 79 | try { |
| 80 | // Create FormData for file upload |
| 81 | const formData = new FormData(); |
| 82 | const blob = new Blob([file.buffer], { type: 'application/octet-stream' }); |
| 83 | formData.append('file', blob, file.originalname); |
| 84 | |
| 85 | // Upload file to Document Engine with proper content type |
| 86 | // @ts-expect-error We can pass FormData to this endpoint. |
| 87 | const response = await client['upload-document']({}, formData, { |
| 88 | headers: { |
| 89 | 'Content-Type': 'multipart/form-data', |
| 90 | }, |
| 91 | }); |
| 92 | |
| 93 | const documentId = response.data.data?.document_id; |
| 94 | if (!documentId) { |
| 95 | throw new Error('No document ID returned from upload'); |
| 96 | } |
| 97 | |
| 98 | results.push({ |
| 99 | filename: file.originalname, |
| 100 | success: true, |
| 101 | documentId: documentId, |
| 102 | }); |
| 103 | } catch (fileError) { |
| 104 | results.push({ |
| 105 | filename: file.originalname, |
| 106 | success: false, |
| 107 | error: fileError instanceof Error ? fileError.message : 'Upload failed', |
| 108 | }); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | // Transform results to match the expected type for the template |
| 113 | const templateResults = results.map(result => { |
| 114 | if ('documentId' in result) { |
| 115 | return { |
| 116 | filename: result.filename as string, |
| 117 | success: result.success, |
| 118 | }; |
| 119 | } else { |
| 120 | return { |
| 121 | filename: result.filename as string, |
| 122 | success: result.success, |
| 123 | error: result.error, |
| 124 | }; |
| 125 | } |
| 126 | }); |
no test coverage detected