Sharp.js+Node.js云函数返回text/html而非图片的修复咨询
修复Firebase Cloud Function返回图片而非text/html的问题
问题根源
- 未设置正确的响应Content-Type头:Firebase Cloud Function默认会将响应类型设为
text/html,导致浏览器无法识别返回的二进制缓冲为图片。 - 异步函数调用遗漏
await:getSharp是异步函数,直接赋值会得到Promise对象而非Sharp实例,后续图片处理逻辑会出错。
修复后的代码
async function getSharp(){ const res = await axiosInstance.request({ url: imageUrl, responseType: 'stream' }); return res.data.pipe(sharp()) as Sharp; } // 调用异步函数必须添加await,确保拿到Sharp实例 const sharp = await getSharp(); const buffer = await sharp .resize({ width: imageWidth }) .jpeg({ quality: 80, }) .toBuffer(); // 设置响应头明确返回类型,再发送图片缓冲 response.setHeader('Content-Type', 'image/jpeg'); response.status(200).send(buffer);
关键修复点
- 给
getSharp()调用添加await:避免拿到Promise对象,确保后续图片处理逻辑正常执行 - 添加
Content-Type响应头:明确告知客户端返回的是JPEG格式图片 - 改用
response.send(buffer):Firebase响应对象的send方法能更稳妥地处理二进制数据传输,替代手动write+end的写法
内容的提问来源于stack exchange,提问作者yuksi
相关产品推荐
相关产品推荐

