конвертировать Base64 изображение с помощью expressjs - PullRequest
0 голосов
/ 12 марта 2020

У меня ошибка преобразования изображения с FTP-сервера в Base64. Например:

router.get('/getPhoto', async function (req, res) {
    const ftp = new PromiseFtp();
    data='';
    try {
      await ftp.connect({ host: varFtp.host, user: varFtp.username, password: varFtp.password })
      const stream = await ftp.get('store/photo1.jpeg');

      data += stream.read().toString('base64');
      console.log(data)  -> this is erorr

      await new Promise((resolve, reject) => {
         res.on('finish', resolve);
         stream.once('error', reject);
         stream.pipe(res)
      });
     } catch(e) {
       console.error(e);
     } finally {
       await ftp.end();
     }
}); 

У меня ошибка TypeError: Cannot read property 'toString' of null. Моя конечная цель, я отправлю Base64 клиенту с json форматом

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вам просто нужно передать кодировку base64 перед отправкой. что-то вроде этого с помощью base64-stream может упростить это

const {Base64Encode} = require("base64-stream");


app.get("/getPhoto", async function (req, res) {
  const ftp = new PromiseFtp();
  data = "";
  try {
    await ftp.connect({ host: varFtp.host, user: varFtp.username, password: varFtp.password })
    const stream = await ftp.get('store/photo1.jpeg');

    await new Promise((resolve, reject) => {
      res.on("finish", resolve);
      stream.once("error", reject);
      stream.pipe(new Base64Encode()).pipe(res); // see here
    });
  } catch (e) {
    console.error(e);
  } finally {
    await ftp.end();
  }
});

1 голос
/ 12 марта 2020
function getImage(imageUrl) {
var options = {
    url: `${imageUrl}`,
    encoding: "binary"
};

  return new Promise(function (resolve, reject) {
    request.get(options, function (err, resp, body) {
        if (err) {
            reject(err);
        } else {
            var prefix = "data:" + resp.headers["content-type"] + ";base64,";
            var img = new Buffer(body.toString(), "binary").toString("base64");
            //  var img = new Buffer.from(body.toString(), "binary").toString("base64");
            var dataUri = prefix + img;
            resolve(dataUri);
        }
    })
})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...