使用 expressjs 转换 Base64 图片

convert Base64 Image with expressjs

我在将图像从 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 格式

发送给客户端
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);
        }
    })
})
}

您只需在发送之前通过管道传输 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();
  }
});