#javascript #node.js #puppeteer
#javascript #node.js #кукловод
Вопрос:
Я пытаюсь загрузить изображение, используя node.js и кукловод, но я сталкиваюсь с некоторыми проблемами. Я использую webscraper для сбора ссылок на изображения с сайта, а затем использую пакет https / http для загрузки изображения.
Это работает для изображений, использующих источники http и https, но на некоторых изображениях есть ссылки, которые выглядят следующим образом (вся ссылка очень длинная, поэтому я вырезал остальные):
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw8AAADGCAYAAACU07w3AAAZuUlEQVR4Ae3df4yU930n8Pcslu1I1PU17okdO1cLrTD g8rNcvRyti6247K5NG5S5HOl5hA2uZ7du6RJEGYPTFy1Nv4RUJy0cWVkeQ9ErqqriHNrR8niZuVIbntBS886rBZWCGHVsNEFRQ5BloPCzGn2B yzZMLyaP……..
Я не уверен, как обращаться с этими ссылками или как загрузить изображение. Любая помощь будет признательна.
Ответ №1:
Сначала необходимо декодировать URL-адрес из base64 с помощью node.js Buffer
.
// the content type image/png has to be removed first
const data = 'iVBORw0KGgoAAAANSUhEUgAAAw8AAADGCAYAAACU07w3AAAZuUlEQVR4Ae3df4yU930n8Pcslu1I1PU17okdO1cLrTD g8rNcvRyti6247K5NG5S5HOl5hA2uZ7du6RJEGYPTFy1Nv4RUJy0cWVkeQ9ErqqriHNrR8niZuVIbntBS886rBZWCGHVsNEFRQ5BloPCzGn2B yzZMLyaP';
const buffer = new Buffer(data);
const base64data = buff.toString('base64');
// after this you will get the url string and continue to fetch the image
Ответ №2:
Это изображения в кодировке base64 (в основном используются для значков и небольших изображений).
вы можете игнорировать это.
if(url.startsWith('data:')){
//base 64 image
} else{
// an image url
}
если вы действительно хотите возиться с base64, я могу дать вам обходной путь.
import { parseDataURI } from 'dauria';
import mimeTypes from 'mime-types';
const fileContent = parseDataURI(file);
// you probably need an extension for that image.
let ext = mimeTypes.extension(fileContent.MIME) || 'bin';
fs.writeFile("a random file" "." ext, fileContent.buffer, function (err) {
console.log(err); // writes out file without error, but it's not a valid image
});