Firebase本地模拟器调用storage的move等API返回未实现错误
问题根本原因
你使用的firebase-tools@9.17.0版本内置的Cloud Storage模拟器尚未实现跨桶文件操作相关的API接口,move()、copy()这类涉及跨桶的操作底层调用的rewrite接口在该版本模拟器中直接返回501未实现错误,而线上生产环境的Storage服务是完整实现了这些接口的,所以才会出现线上正常、本地模拟器报错的差异。
解决方案
方案一:升级firebase-tools版本
这是最简便的修复方式,Firebase团队在firebase-tools@10.9.0及之后的版本中补全了Storage模拟器的跨桶操作支持,执行全局升级命令即可:npm install -g firebase-tools@latest升级完成后重启本地Firebase模拟器即可正常运行原有代码。
方案二:临时兼容方案(无法升级工具时使用)
如果暂时不能升级firebase-tools版本,可以在本地测试时手动实现move逻辑,无需修改核心业务流程,改动后代码本地、线上都可以正常运行:
把原有await file.move(dst)替换为如下逻辑:// 兼容旧版本Storage模拟器跨桶操作 const [fileBuffer] = await file.download(); await dst.save(fileBuffer, { contentType: file.metadata.contentType }); await file.delete();
内容的提问来源于stack exchange,提问作者Peter Young
相关产品推荐
相关产品推荐

