const AWS = require('aws-sdk') const fs = require('fs') const path = require('path') const imagemin = require('imagemin') const imageminJpegtran = require('imagemin-jpegtran') const imageminPngquant = require('imagemin-pngquant') class Aws { constructor () { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) } _send (params, callback) { fs.readFile(params.path, (err, data) => { if (err) { callback(err, null) return false } const base64data = Buffer.from(data, 'binary') const dest = path.join(process.env.AWS_BASEFOLDER, params.filename) const s3 = new AWS.S3() s3.putObject({ Bucket: process.env.AWS_BUCKET, Key: dest, Body: base64data, ACL: 'public-read' }, (err, res) => { if (err) { callback(err, res) } else { callback(null, { file: process.env.AWS_URL + dest }) } }) }) } _compress (params, callback) { const newFile = params.path + '.' + params.filename.split('.')[1] fs.copyFile(params.path, newFile, (err, res) => { console.log('_compress => copyFile') if (err) { callback(err, null) return false } try { (async () => { // const file = await imagemin([newFile], '/tmp', { // plugins: [ // imageminJpegtran(), // imageminPngquant({ // quality: '65-80' // }) // ] // }) // console.log('Après imagemin') this._send({ path: newFile, // path: file[0].path, filename: params.filename }, (err, res) => { callback(err, res) // fs.unlink(file[0].path, () => { }) }) })() } catch (e) { console.log('Error:', e) callback(e) } }) } /** * Upload file on s3 * @param {Object} params {path: String, filename: String} * @param {Function} callback */ upload (params, callback) { fs.readFile(params.path, (err, data) => { console.log('après upload -> readfile') if (err) { callback(err, null) return false } this._compress(params, callback) }) } deleteObjects (files, callback) { const s3 = new AWS.S3() const basePath = process.env.AWS_URL + process.env.AWS_BASEFOLDER let items = [] files.forEach((file) => { if (file) { items.push({ Key: file.replace(basePath, '') }) } }) if (items.length > 0) { s3.deleteObjects({ Bucket: process.env.AWS_BUCKET, Delete: { // required Objects: items } }, callback) } else { callback(null, { code: 200, res: 'No file deleted' }) } } } module.exports = Aws