62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
const AWS = require('aws-sdk')
|
|
const fs = require('fs')
|
|
const { stringifyError } = require('../utils/logService')
|
|
var s3 = new AWS.S3()
|
|
|
|
const fetchS3Object = async ({ fileName, bucket, filePath }) => {
|
|
filePath = filePath || '/tmp/' + fileName
|
|
console.log('Fetching', stringifyObj({ fileName, filePath }))
|
|
try {
|
|
var params = { Bucket: bucket, Key: fileName }
|
|
const downloadResult = await s3.getObject(params).promise()
|
|
fs.writeFileSync(filePath, downloadResult.Body, function (err) {
|
|
if (err) console.log(err.code, '-', err.message)
|
|
})
|
|
return filePath
|
|
} catch (error) {
|
|
console.log('Download from S3 Error:', stringifyError(error))
|
|
throw error
|
|
}
|
|
}
|
|
|
|
const upload = ({
|
|
filePath,
|
|
fileName,
|
|
bucket,
|
|
contentType,
|
|
fileType,
|
|
// accessControl,
|
|
}) => {
|
|
return new Promise((resolve, reject) => {
|
|
// accessControl = accessControl || 'public-read'
|
|
fs.readFile(filePath, function (err, data) {
|
|
if (err) reject(err)
|
|
const params = {
|
|
Bucket: bucket, // pass your bucket name
|
|
Key: fileName,
|
|
Body: data,
|
|
// ContentType: contentType,
|
|
// ContentDisposition: `inline; fileName=${fileName}.${fileType}`,
|
|
// ACL: accessControl,
|
|
}
|
|
s3.upload(params, function (err, data) {
|
|
if (err) {
|
|
reject(err)
|
|
console.log(`${fileName} Upload to s3`, stringifyError(err))
|
|
} else {
|
|
console.log(
|
|
`Successfully uploaded data ${fileName}`,
|
|
stringifyError(data)
|
|
)
|
|
resolve(data.Location)
|
|
}
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
upload,
|
|
fetchS3Object,
|
|
}
|