Node.js使用sharp处理远程图片后保存的文件无后缀无法被系统识别
你调用sharp处理后返回的元数据已经包含图片格式信息,直接读取该字段拼接到输出文件名即可,Windows会自动识别后缀匹配对应的文件格式。
修改后的完整代码
module.exports = async function resize() { const url = 'https://images.unsplash.com/photo-1636838123974-c94c6904b97a?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=687&q=80'; const readBuffer = await got(url).buffer(); // 初始化sharp实例,处理动图可添加 { animated: true } 参数保留所有帧 const imageProcessor = sharp(readBuffer).resize(200, 200); // 提前获取图片元数据得到格式信息 const { format } = await imageProcessor.metadata(); // 拼接后缀输出文件 const storedValue = await imageProcessor.toFile(`output.${format}`); console.log("resized buffer", imageProcessor); console.log("-----------------------------------------------------------") console.log(storedValue); return "ok"; }
补充说明
- 如果你需要严格匹配源文件的格式而非sharp处理后的输出格式,可以通过
got的响应头获取原始文件的content-type,再映射为对应后缀即可。 - 处理GIF动图时必须在初始化sharp时添加
animated: true参数,否则只会输出第一帧的静态图片。 - Windows系统依赖文件后缀名判断文件类型,没有正确后缀的文件无法被系统识别为对应格式的资源。
内容的提问来源于stack exchange,提问作者Nothing
相关产品推荐
相关产品推荐

