node-rigorous
Version:
Rigorous Framework
70 lines (51 loc) • 2.28 kB
JavaScript
const request = require('request');
const fs = require('fs');
const rigorousConfig = require('../config');
function isEncodedImage(rawImage) {
return rawImage.indexOf('data:image') > -1;
}
class LocalRessourceService {
static deleteImageOnDisk(fileLocalPathImage) {
fs.unlinkSync(fileLocalPathImage);
}
static saveRemoteImageOnDisk(rawImage, imageName) {
return new Promise((resolve, reject) => {
try {
const filePathImage = `${rigorousConfig.TEMPORARY_RESOURCES_PATH}${imageName}.${rigorousConfig.IMAGE_EXTENSION}`;
const callback = (err) => {
if (err) {
console.log(err);
reject(err);
}
/*
TODO detect broken image: exemple - https://d1eh9yux7w8iql.cloudfront.net/fo/img/open_graph_fr-fr.png
fs.readFile(filePathImage, (err2, data) => {
console.log('err2 ', err2)
if (err2) { throw err2; } // Fail if the file can't be read.
});
*/
resolve(filePathImage);
};
if (isEncodedImage(rawImage)) {
const parseRawImage = rawImage.split(','); // data:image/jpeg;base64,/9j/4AAQSk
const encodingParsed = parseRawImage[0].split(';')[1];
const data = parseRawImage[1];
fs.writeFile(filePathImage, data, encodingParsed, (err) => {
callback(err);
});
} else {
// If not we assume it is a url
const imageUrl = rawImage;
request(imageUrl, { encoding: 'binary' }, (error, response, body) => {
fs.writeFile(filePathImage, body, 'binary', (err) => {
callback(err);
});
});
}
} catch (err) {
reject(err);
}
});
}
}
module.exports = LocalRessourceService;