egg上传图片如果转buffer格式

从前端上传一张图片,在后端,得到临时路径如下:

/var/folders/5y/3cm_1kws4r18wmx5n2l9ntzm0000gn/T/egg-multipart-tmp/multipart-file-mode-example/2018/10/29/14/5eb8f5b7-a1d5-4b6a-9cf0-4fcc80bab4f0.png

我希望将此图片传入sharp中做压缩等处理,但是此路径传入sharp,报错:输入文件有损坏的头,所以是否可以将此临时路径转为buffer格式传入?如果可行,如果将此路径转化为buffer格式?望赐教。

阅读 3.9k
1 个回答

前端传上来的stream转换成buffer,然后用这个buffer实例化一个sharp对象,做一系列操作后toFile(目标路径)保存服务端。
stream转buffer 用下面这个函数

const streamToBuffer = stream => {
  return new Promise((resolve, reject) => {
    const buffers = [];
    stream.on('error', reject);
    stream.on('data', data => buffers.push(data));
    stream.on('end', () => resolve(Buffer.concat(buffers)));
  });
};

然后 调用并实例化sharp 如:

// stream 转成 buffers
const buf = await streamToBuffer(stream);
// 初始化sharp对象
const originImg = sharp(buf);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题