как загрузить изображение из url в буфер в nodejs



Я новичок в nodejs и пытаюсь настроить сервер, где я получаю информацию exif из образа. Мои изображения находятся на S3, поэтому я хочу иметь возможность просто передать url-адрес s3 в качестве параметра и захватить изображение из него.



Я использую проект ExifImage ниже, чтобы получить информацию exif и в соответствии с их документацией:



" вместо указания имени файла образа в файловой системе вы также можете передать буфер в ExifImage."



Как загрузить изображение в буфер в узле из url-адреса, чтобы я мог передать его функции ExifImage



Проект ExifImage:
https://github.com/gomfunkel/node-exif



Спасибо за помощь!

650   3  

3 ответов:

Попробуйте настроить запрос следующим образом:

var request = require('request').defaults({ encoding: null });
request.get(s3Url, function (err, res, body) {
      //process exif here
});

Это вызовет запрос на вывод буфера вместо строки.

Используйте библиотеку request.

request('<s3imageurl>', function(err, response, buffer) {
    // Do something
});

Кроме того, node-image-headers может представлять для вас интерес. Похоже, что он принимает поток, поэтому ему даже не нужно загружать полное изображение из S3, чтобы обработать заголовки.

Обновлено с корректной сигнатурой обратного вызова.

Я смог решить эту задачу только после того, как прочитал, что encoding: null является требуемым и предоставил его в качестве параметра для запроса.

Это загрузит изображение из url и создаст буфер с данными изображения.

Использование библиотеки запросов -

const request = require('request');

let url = 'http://website.com/image.png';
request({ url, encoding: null }, (err, resp, buffer) => {
     // Use the buffer
     // buffer contains the image data
     // typeof buffer === 'object'
});

Примечание: пропуск encoding: null приведет к непригодной строке, а не к буферу. Буфер.от не будет работать правильно тоже.

Это было проверено с узлом 8

Comments

    Ничего не найдено.