将getSignedUrl用于缩略图的Firebase云功能将在大约一周后到期,没有明确的原因吗?

时间:2019-05-04 19:35:30

标签: firebase url google-cloud-functions google-cloud-storage

我能够为正在创建的缩略图成功生成一个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权限有关-我试图与他们联系,但是大约一周之后我仍在等待他们的回应。

感谢所有反馈!

0 个答案:

没有答案