Node.js云函数上传Firebase Storage文件类型显示为application/octet-stream
问题原因分析
Sharp输出未明确指定JPEG格式
如果原始图片不是JPEG格式,Sharp默认会沿用原格式输出二进制数据。即使手动设置contentType: 'image/jpeg',模拟器可能优先根据文件内容的实际格式判断类型,覆盖指定的参数。必须在Sharp处理时明确调用toFormat('jpeg')方法,确保输出标准JPEG二进制。Firebase模拟器版本存在兼容性bug
你使用的firebase tools 11.16.0版本的Storage模拟器,存在忽略手动指定contentType的已知问题,尤其是通过Buffer或流上传文件时,会默认将类型设为application/octet-stream。升级到12.x及以上版本的firebase tools可解决该问题。上传参数配置错误
检查上传代码中metadata参数的传递是否正确。比如使用uploadBytes时,必须将包含contentType的对象作为第三个参数传入,不能嵌套错误或遗漏参数。示例正确写法:const storageRef = ref(storage, 'thumbnails/xxx.jpg'); const metadata = { contentType: 'image/jpeg' }; await uploadBytes(storageRef, sharpBuffer, metadata);Sharp流的元信息缺失
当使用Sharp的流模式上传时,生成的流可能未携带正确的MIME类型元信息。这种情况下,即使指定了contentType,模拟器可能优先读取流的内置元数据,而Sharp的流默认不会添加该信息,导致类型识别错误。此时可改用Buffer上传,或手动为流添加元数据标识。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

