Nodejs Скачать изображения с сервера и положить в нужную папку?

Подскажите, пожалуйста, как на nodejs должен выглядеть код который будет скачивать картинку по указанному адресу (К примеру картинку https://ibb.co/X44SCpN) и класть в определенную папку. Или что надо знать что б это реализовать? В какую сторону копать ?


Ответы (1 шт):

Автор решения: DiD

Нужно установить модуль node-fetch.

const fetch = require('node-fetch');
const fs = require('fs');

function downloadFile(url, path) {
  return fetch(url).then(res => {
    res.body.pipe(fs.createWriteStream(path));
  });
}

// Using
downloadFile('https://i.ibb.co/QccrKnz/artboar8d-53.jpg','/tmp/artboar8d-53.jpg')
   .then(()=>console.log('OK'))
   .catch(err=>console.error(err));

Я сделал еще небольшой код, который скачивает страницу IBB, парсит эту страницу, ищет ссылку оригинальной картинки на странице и скачивает картинку сохраняя файл в папку (не спрашивая полного адреса к файлу - достаточно указать папку), в конце результатом выдает путь к картинке. Дополнительно требует модуль cheerio.

const fetch = require('node-fetch');
const fs = require('fs');
const cheerio = require('cheerio');
const path = require('path');

async function downloadIBB(pageUrl, folder){
  const res = await fetch(pageUrl);
  const page = await res.text();
  const $ = cheerio.load(page);
  const imgUrl = $('link[rel="image_src"]').attr('href');
  const filename = path.basename(imgUrl);
  const filepath = path.join(folder,filename);
  const imgRes = await fetch(imgUrl);
  return new Promise(res=>{
    filestream = fs.createWriteStream(filepath);
    imgRes.body.pipe(filestream);
    filestream.on('finish',()=>res(filepath));
  });
}


// Using
downloadIBB('https://ibb.co/X44SCpN','/tmp')
   .then((path)=>console.log(path))
   .catch(err=>console.error(err));
→ Ссылка