MCPcopy Create free account
hub / github.com/PSPDFKit/nutrient-document-engine-mcp-server / uploadHandler

Function uploadHandler

src/dashboard/routes.ts:69–140  ·  view source on GitHub ↗
(client: DocumentEngineClient, req: Request, res: Response)

Source from the content-addressed store, hash-verified

67 * File upload handler
68 */
69export 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 });

Callers 1

createDashboardRouterFunction · 0.85

Calls 3

errorTemplateFunction · 0.85
uploadResultsTemplateFunction · 0.85
errorMethod · 0.80

Tested by

no test coverage detected