Spaces:
Runtime error
Runtime error
import { s3, generateSignedUrl, generateDownloadUrl } from '../../middlewares/multer'; | |
import { logger } from '../../utils/logger'; | |
export const uploadInvoice = async (files: Express.Multer.File[]) => { | |
const uploadPromises = files.map(async (file) => { | |
const objectKey = Date.now().toString() + '-' + file.originalname; | |
const bucketName = process.env.AWS_S3_BUCKET_NAME || ''; | |
try { | |
const signedUrl = await generateSignedUrl({ | |
bucketName, | |
objectKey, | |
contentType: file.mimetype, | |
}); | |
// Use fetch to upload the file using the signed URL | |
const response = await fetch(signedUrl, { | |
method: 'PUT', | |
headers: { | |
'Content-Type': file.mimetype, | |
}, | |
body: file.buffer, | |
}); | |
if (!response.ok) { | |
throw new Error('File upload failed'); | |
} | |
// Generate download URL | |
const downloadUrl = await generateDownloadUrl({ | |
bucketName: process.env.AWS_S3_BUCKET_NAME || '', | |
objectKey, | |
}); | |
return { file: file.originalname, url: downloadUrl }; | |
} catch (err:any) { | |
logger.error('Error uploading file'); | |
logger.error(err); | |
return { file: file.originalname, error: err.message }; | |
} | |
}); | |
return Promise.all(uploadPromises); | |
}; | |
export const getDownloadUrl = async (filename: string) => { | |
const objectKey = Date.now().toString() + '-' + filename; | |
const bucketName = process.env.AWS_S3_BUCKET_NAME || ''; | |
const downloadUrl = await generateDownloadUrl({ | |
bucketName: bucketName, | |
objectKey, | |
}); | |
return downloadUrl; | |
} | |