我能够为正在创建的缩略图成功生成一个signedUrl,但是大约一周后它们不再起作用...
我没有得到任何关于它们为什么到期的错误或信息,只是。
我一直在使用Firebase来开发我的应用,现在突然我不得不处理所有这些Google Cloud Storage许可以及其他问题-真的不知道发生了什么...这一定是权限问题?
我尝试从Firebase控制台生成一个新的服务帐户,但是没有运气...我已经厌倦了等待数周的时间,看看它们是否会再次过期。我希望有人可以指导我解决这个问题-对许多人来说似乎是个问题...我们无法上线并在整个应用程序中显示灰色缩略图,因为它们已过期。
这是我们如何使用Firebase云功能生成SignedUrl:
export const generateThumbs = functions.storage
.object()
.onFinalize(async object => {
const fileBucket = object.bucket; // The Storage bucket that contains the file.
const filePath = object.name; // File path in the bucket.
const fileName = filePath.split('/').pop();
const userUid = filePath.split('/')[2];
const sizes = [150, 256];
const bucketDir = dirname(filePath);
if (!filePath.startsWith('categories/')) {
console.log('This is not in the categories directory.');
return false;
}
if (fileName.includes('thumb@') || !object.contentType.includes('image')) {
console.log('exiting function');
return false;
}
const bucket = gcs.bucket(fileBucket);
const tempFilePath = path.join(tmpdir(), fileName);
return bucket.file(filePath).download({
destination: tempFilePath
}).then(() => {
sizes.map(size => {
const newFileName = `thumb@${size}_${fileName}`
const newFileTemp = path.join(tmpdir(), newFileName);
const newFilePath = `thumbs/${newFileName}`
return sharp(tempFilePath)
.resize(size, size)
.toFile(newFileTemp, () => {
return bucket.upload(newFileTemp, {
destination: join(bucketDir, newFilePath),
metadata: {
contentType: 'image/jpeg'
}
}).then((data) => {
const file = data[0]
file.getSignedUrl({
action: 'read',
expires: '03-17-2100'
}, function(err, url) {
if (err) {
console.error(err);
return;
}
if (size === 150) {
return admin.database().ref('profileThumbs').child(userUid).child(fileName).set({ thumb: url });
} else if (size === 256) {
return admin.database().ref('categories').child(fileName).child('thumb').set(url)
.then(() => {
admin.database().ref('categories').child(fileName).child('tempThumb').remove();
})
}
})
})
})
})
}).catch(error =>{
console.log(error);
});
})
在将到期日期设置为03-17-2100之后,我们不希望出现这种类型的行为,但是就像我说的那样,我觉得这与gcs权限有关-我试图与他们联系,但是大约一周之后我仍在等待他们的回应。
感谢所有反馈!