Загрузите изображение / файл ‘data:’ с помощью puppeteer и node.js

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