避免Google存储功能中的无限循环

时间:2019-04-14 21:16:26

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

我在google函数中遇到了无限循环的问题。我再次尝试自动调整图像大小并停止该功能,但是我不知道如何检查文件是否已调整大小。我发现很少有解决方案来更改名称,然后检查名称是否已更改,但问题是我想保留原始文件名。

我还使用了一些示例文件来检查文件是否已删除,但这似乎也不起作用

if(object.resourceState === 'not_exists'){
    console.log('File deleted')
    return null
}

请提供任何帮助

exports.handler = ((object) => {
const bucket = object.bucket;
const contentType = object.contentType;
const filePath = object.name

const destBucket = storage.bucket(bucket)
const tempFilePath = path.join(os.tmpdir(), path.basename(filePath))
const metadata = { contentType: contentType }

if (!object.contentType.startsWith('image/')) {
    console.log('This is not an image.');
    return null;
  }

if(object.resourceState === 'not_exists'){
    console.log('File deleted')
    return null
}

return destBucket.file(filePath).download({
    destination: tempFilePath
}).then(() => {
    return spawn('convert', [tempFilePath, '-resize', '150x150', tempFilePath])
}).then(() => {
    return destBucket.upload(tempFilePath, 
        {
            destination: path.basename(filePath),
            metadata: metadata
        })
})

2 个答案:

答案 0 :(得分:0)

如果绝对必须覆盖原始文件,则应检查传递给函数的generation对象的ObjectMetadata值,以便确定对象是否已被处理。

答案 1 :(得分:0)

经过数小时的Google文档浏览,我终于设法在偶然的类似问题中找到了关于stackoverflow的解决方案。

Firebase Function - Resize and overwrite existing image on upload to Storage

我不敢相信某些Google文档如此无用。他们大多数人都还不错。

有权力的人都可以“将此问题标记为重复”