firebase - 在模拟的 Firebase 函数中运行 admin.storage().bucket(..).file(..).move() 时出现未实现的 API 错误
问题描述
“firebase”:“9.0.1”-本地“firebase-tools”:9.17.0-全局“节点”:v14.17.4
我.move()
在模拟函数中使用 Firebase 管理 SDK 调用。Firebase 返回以下错误:
ApiError: file#copy failed with an error - Not Implemented
at new ApiError (.../functions/node_modules/@google-cloud/common/build/src/util.js:73:15)
statusCode: 501
request: {
agent: [Agent],
headers: [Object],
href: 'http://localhost:9199/b/public-8s9ch/o/91ff38b1-b521-4a23-8844-b12cffa0ee98%2Fscreenshot.png/rewriteTo/b/private-8s9ch/o/91ff38b1-b521-4a23-8844-b12cffa0ee98%2Fcd665e29-edc8-4832-9bc7-110c21f1e560?'
},
body: 'Not Implemented',
完全相同的代码,具有相同的测试和安装的软件包,在部署到 Firebase 时可以完美运行,而不是在模拟器中使用。.copy
无论使用 Admin SDK 还是使用客户端 SDK(例如、.move
、.delete
等) ,对存储 API 的任何调用都会出现同样的问题。
这是一些有助于重现错误的代码:
export const firebaseFunction = functions
.runWith({ memory: "128MB" })
.region("us-central1")
.firestore.document("documents/{docId}")
.onCreate(async (snap, context) => {
try {
const { srcId } = snap.data();
const [files] = await admin
.storage()
.bucket('public')
.getFiles({
prefix: `${srcId}/`,
delimiter: "/",
autoPaginate: false,
});
const promises = files.map((file) => {
return new Promise<void>(async (resolve, reject) => {
try {
const dst = admin
.storage()
.bucket('private')
.file(`${srcId}/${uuidv4()}`);
await file.move(dst);
resolve();
} catch (err) {
reject(err);
}
});
});
await Promise.all(promises);
} catch (error) {
return console.log(error);
}
});
解决方案
推荐阅读
- jsf - 通过调用 javaScript 函数来中断 Bean 方法?
- python - 如何在使用 testinfra 库的失败测试中返回 stderr=?
- ios - 更新 Firebase 包后,“InstanceID”不包含“SetApnsToken”的定义
- python - 重定向后来自模板的信息,Django - Python
- ios - 在 iOS 上拦截崩溃
- android - 输出形式 ArrayMap 等于 null
- shell - 如何在 Shell 脚本中运行多个 SQL 脚本文件
- firebase - 如何在用户表中获取只有第一个 ID 的孩子
- flutter - 如何一次在 pubspec.yamal 的资产子目录中添加所有文件?
- java - 在 `value` 标记内执行表达式