@crdrads

Почему буффер трансформируется?

При загрузке картинки я использую Multer, который отдает req.file. Далее этот req.file мне надо передать другой функции (а точнее процессу). Но он меняется с

buffer:
   <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 04 ef 00 00 03 ce 08 02 00 00 00 d8 d3 ab 62 00 00 00 03 73 42 49 54 08 08 08 db e1 4f e0 00 00 ... 764163 more bytes>

на
buffer:
   { type: 'Buffer',
     data:
      [ 137,
        80,
        78,
        71,
        13...
...


Почему так происходит и как исправить?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 2
john36allTa
@john36allTa
alien glow of a dirty mind
Всё просто, вставьте в консоль
console.log(`<Buffer ${(137).toString(16)} ${(80).toString(16)} ${(78).toString(16)}`)

и получите начало сырого буфера.
Ваши данные преобразуются во время передачи/парсинга. Но data, по сути, остаётся эквивалентной исходнику и разницы в них нет (если так построена структура типа Buffer). Почему трансформируется?
let buffer = new Buffer.from("example");
console.log(buffer);
// <Buffer 65 78 61 6d 70 6c 65>

let json = buffer.toJSON();
console.log(json); 
// {type: "Buffer", data: [ 101, 120, 97, 109, 112, 108, 101 ] }

let example = new Buffer.from(json);
console.log(example); 
// <Buffer 65 78 61 6d 70 6c 65>

Это означает, что Ваши данные преобразуются в json структуру а потом передаются. Но не к другой функции:
function printBuffer(buffer){
    console.log(buffer);
}
printBuffer(example); 
//<Buffer 65 78 61 6d 70 6c 65>
Ответ написан
@grinat
Ну он меняется с 16бит на 8бит. Если нужен нодовский буфер в 16 бит, то просто Buffer.from([ 137,
80,
78,
71]) получишь исходный.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 14:51
10000 руб./за проект
25 нояб. 2024, в 14:41
20000 руб./за проект