Буфер для загрузки файлов с помощью express.js

Привет, приведенный ниже код javascript позволяет мне восстанавливать файлы из файловой системы и отправлять их во внешний интерфейс, однако, когда я запускаю код, у меня появляется следующая ошибка, из-за чего это происходит?

Ошибка: TypeError [ERR_INVALID_ARG_TYPE]: первый аргумент должен быть одним из типов: строка, буфер, ArrayBuffer, массив или объект, подобный массиву. Полученный объект типа, на этом коде

Код JavaScript:

http.createServer(function(req, res) {
    console.log("Recupero immagini");
    var request = url.parse(req.url, true);
    var action = request.pathname;
    //Recupero il logo della società
    if (action == '/logo.jpg') {
        console.log("Recupero logo");
        var img = fs.readFileSync('./Controller/logo.jpg');
        res.writeHead(200, {
            'Content-Type': 'image/jpeg'
        });
        res.end(img, 'binary');
    }
    //Recupero la firma del tecnico
    else if (action == '/firmatecnico.png') {
        console.log("Recupero logo tecnico");
        var img2 = fs.readFileSync('./firmatecnico.png');
        res.writeHead(200, {
            'Content-Type': 'image/png'
        });
        res.end(img2, 'binary');
    }
}).listen(8570);

person riki    schedule 06.07.2020    source источник
comment
В какой строке выдается ошибка?   -  person eol    schedule 06.07.2020
comment
@eol в строке res.end и fs.readFileSync   -  person riki    schedule 06.07.2020
comment
Хотя это не идеально (вы читаете весь файл в память и должны использовать streams / pipe), ваш код отлично работает на моей машине. Можете ли вы опубликовать трассировку стека?   -  person eol    schedule 06.07.2020


Ответы (1)


Хотя я не уверен, в чем причина ошибки, вы можете попробовать создать поток чтения из файлов и передать их в объект ответа (это благоприятно, поскольку он не считывает весь файл в память):

const http = require('http');
const fs = require('fs');
http.createServer(function(req, res) {

  // ...
  const fileStream = fs.createReadStream('./path/to/your/file');
  fileStream.pipe(res);
  // ...

}).listen(8570);
person eol    schedule 06.07.2020
comment
а это возврат base64? - person riki; 06.07.2020
comment
Я не понимаю, что ты имеешь в виду? :) - person eol; 06.07.2020