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));