Firebase Storage Admin Error:400 Invalid Bucket Name
Firebase Storage Admin Error:400 Invalid Bucket Name
我正在尝试使用 firebase 函数来维护我的数据库和存储。基本上在它们过期后将一些旧条目从一个 ref/bucket 删除到另一个。
数据库部分工作得很好。但是,存储部分并没有那么多。以下是我在代码中初始化所有内容的方式:
var functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require('./my-app-bla-bla.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://my-app.firebaseio.com',
storageBucket: 'gs://my-app.appspot.com'
});
然后在清理数据库和存储的 cron 作业中,我有以下内容(这只是一些相关的小部分):
const st = admin.storage();
st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey).create(function(error, bucket, apiResponse) {
if (error) {
console.log("Couldn't create an OldListing bucket: " + error.code);
console.log(apiResponse);
} else {
console.log("Created OldListing bucket");
}
});
最后一段代码触发了错误并给出了以下日志:
Couldn't create an OldListing bucket: 400
{ error:
{ errors: [ [Object] ],
code: 400,
message: 'Invalid bucket name: \'my-app.appspot.com/old-listings/SomeUniqueID\'' } }
因为我是运行第一次写这个代码,文件夹old-listings
还不存在。所以我想也许我应该先自己创建它的桶。它给了我同样的错误。
我也尝试过使用没有 gs link 的桶,例如st.bucket("old-listings/"+listingKey)
而不是 st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey)
。仍然给我同样的错误。
那么这里到底缺少什么?我做错了什么?
编辑 1
我尝试在 cron 函数的开头添加以下代码片段。为了更好地了解正在发生的事情。
admin.storage().bucket("my-app.appspot.com").exists(function(error, exists) {
if (!error) {
if (exists) {
console.log("Top Bucket Exists");
} else {
console.log("Top Bucket Does Not Exist");
}
} else {
console.log("Top Bucket Error " + error.code);
}
});
admin.storage().bucket("my-app.appspot.com/listings").exists(function(error, exists) {
if (!error) {
if (exists) {
console.log("Listings Bucket Exists");
} else {
console.log("Listings Bucket Does Not Exist");
}
} else {
console.log("Listings Bucket Error " + error.code);
}
});
我在日志中得到以下信息:
Top Bucket Exists
Listing Bucket Error undefined
当然,我的 firebase 存储中已经有一个名为 listings
的文件夹。那么为什么第二个桶是未定义的呢?
我正在尝试使用 firebase 函数来维护我的数据库和存储。基本上在它们过期后将一些旧条目从一个 ref/bucket 删除到另一个。 数据库部分工作得很好。但是,存储部分并没有那么多。以下是我在代码中初始化所有内容的方式:
var functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require('./my-app-bla-bla.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://my-app.firebaseio.com',
storageBucket: 'gs://my-app.appspot.com'
});
然后在清理数据库和存储的 cron 作业中,我有以下内容(这只是一些相关的小部分):
const st = admin.storage();
st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey).create(function(error, bucket, apiResponse) {
if (error) {
console.log("Couldn't create an OldListing bucket: " + error.code);
console.log(apiResponse);
} else {
console.log("Created OldListing bucket");
}
});
最后一段代码触发了错误并给出了以下日志:
Couldn't create an OldListing bucket: 400
{ error:
{ errors: [ [Object] ],
code: 400,
message: 'Invalid bucket name: \'my-app.appspot.com/old-listings/SomeUniqueID\'' } }
因为我是运行第一次写这个代码,文件夹old-listings
还不存在。所以我想也许我应该先自己创建它的桶。它给了我同样的错误。
我也尝试过使用没有 gs link 的桶,例如st.bucket("old-listings/"+listingKey)
而不是 st.bucket("gs://my-app.appspot.com/old-listings/"+listingKey)
。仍然给我同样的错误。
那么这里到底缺少什么?我做错了什么?
编辑 1
我尝试在 cron 函数的开头添加以下代码片段。为了更好地了解正在发生的事情。
admin.storage().bucket("my-app.appspot.com").exists(function(error, exists) {
if (!error) {
if (exists) {
console.log("Top Bucket Exists");
} else {
console.log("Top Bucket Does Not Exist");
}
} else {
console.log("Top Bucket Error " + error.code);
}
});
admin.storage().bucket("my-app.appspot.com/listings").exists(function(error, exists) {
if (!error) {
if (exists) {
console.log("Listings Bucket Exists");
} else {
console.log("Listings Bucket Does Not Exist");
}
} else {
console.log("Listings Bucket Error " + error.code);
}
});
我在日志中得到以下信息:
Top Bucket Exists
Listing Bucket Error undefined
当然,我的 firebase 存储中已经有一个名为 listings
的文件夹。那么为什么第二个桶是未定义的呢?