const fs = require('fs'); const path = require('path'); const ExifReader = require('exifreader'); const sharp = require('sharp'); var productsDatabase = { photos: []} var i = 1; var s = 0; //console.log("start search"); async function searchFile(dir, fileExt) { s++; // read the contents of the directory const files = fs.readdirSync(dir); // search through the files for (let k = 0; k < files.length; k++) { file = files[k]; const filePath = path.join(dir, file); // get the file stats const fileStat = fs.statSync(filePath); // if the file is a directory, recursively search the directory if (fileStat.isDirectory()) { await searchFile(filePath, fileExt); } else if (path.extname(file).toLowerCase() == fileExt) { // if the file is a match, print it var dd = dir.split("/"); var d = dd.slice(1); var d1 = dd.slice(1); d1[1]= "thumbs"; var ff = file.split("."); var fn = ff.slice(0,-1).join("."); var f1 = fn+'_min'+'.'+ff.at(-1); var f2 = fn+'_avg'+'.'+ff.at(-1); var f3 = fn+'_sharp'+'.'+ff.at(-1); var extFilePath = path.join(d.join("/"),file); var extThumbMinPath = path.join(d1.join("/"),f1); var extThumbAvgPath = path.join(d1.join("/"),f2); var extThumbSharpPath = path.join("public",d1.join("/"),f3); var thumbMinPath = path.join("public",extThumbMinPath); var thumbAvgPath = path.join("public",extThumbAvgPath); var dt = path.join("public",d1.join("/")); if (!fs.existsSync(dt)){ fs.mkdirSync(dt, { recursive: true }); } var data; try { data = fs.readFileSync(filePath); } catch (err) { //console.error(err); } const tags = await ExifReader.load(filePath, {expanded: true}); //console.log(tags); var time = tags.exif.DateTimeOriginal; if (time === undefined){} else {time=time.value[0]} var gps = tags['gps']; //if (time === undefined ){console.log(filePath)} //console.log("read: "+filePath); await sharp(data) .resize(100,100,"inside") .withMetadata() .toFile(thumbMinPath, (err, info) => {}); await sharp(data) .resize(400) .withMetadata() .toFile(thumbAvgPath, (err, info) => {}); //console.log(pub); productsDatabase.photos.push({ id: i, name: file, path: extFilePath, thub1: extThumbMinPath, thub2: extThumbAvgPath, gps: tags['gps'], data: time }); i++; } if(k == files.length-1) { if (s == 1) { fs.writeFileSync("api_v1/db.json", JSON.stringify(productsDatabase)); //console.log("finito"); //console.log(productsDatabase); } else { s--; } } } } async function thumb(filePath, opt){ try { const thumbnail = await imageThumbnail(filePath, opt); //console.log(thumbnail); return thumbnail; } catch (err) { //console.error(err); } } // start the search in the current directory async function run(){ await searchFile('./public/photos/original', '.jpg'); //console.log(JSON.stringify(productsDatabase)) } run()