{ "success": true, "message": "3 files uploaded successfully", "data": { "uploadedFiles": [ { "originalName": "photo1.jpg", "fileName": "photo1.jpg", "path": "vacation/2023/photo1.jpg", "size": 2048576, "mimeType": "image/jpeg" }, { "originalName": "photo2.png", "fileName": "photo2.png", "path": "vacation/2023/photo2.png", "size": 1536000, "mimeType": "image/png" } ], "folder": "vacation/2023", "totalFiles": 2, "totalSize": 3584576 } }
Upload new images to the photo frame collection
curl -X POST http://localhost:3000/api/upload \ -H "Cookie: session-cookie" \ -F "files=@photo1.jpg"
curl -X POST http://localhost:3000/api/upload \ -H "Cookie: session-cookie" \ -F "files=@photo1.jpg" \ -F "files=@photo2.png" \ -F "folder=vacation/2023"
{ "success": false, "error": "File too large", "code": "FILE_SIZE_EXCEEDED", "details": { "maxSize": "10MB", "fileSize": "15MB", "fileName": "large-photo.jpg" } }
async function uploadImages(files, folder = '') { const formData = new FormData(); // Add files to form data files.forEach(file => { formData.append('files', file); }); // Add folder if specified if (folder) { formData.append('folder', folder); } try { const response = await fetch('/api/upload', { method: 'POST', body: formData, credentials: 'include' // Include session cookie }); const result = await response.json(); if (result.success) { console.log(`Uploaded ${result.data.totalFiles} files`); return result.data.uploadedFiles; } else { throw new Error(result.error); } } catch (error) { console.error('Upload failed:', error); throw error; } } // Usage with file input const fileInput = document.getElementById('file-input'); fileInput.addEventListener('change', async (e) => { const files = Array.from(e.target.files); await uploadImages(files, 'new-photos'); });
vacation/2023/summer
< > : " | ? * \