Firebase Cloud Storage getSignedUrl过期日期不能在过去(Firebase Cloud



这是我的云函数代码片段,与问题相关:

// Somewhere outside the function
import * as nodedt from 'node-datetime'
...
// Inside the function trigger
const dt = nodedt.create((new Date()).valueOf() + 300000)
const exp = dt.format("d-m-Y H:M:S")
return bucket.file(MY_FILE_PATH).getSignedUrl({
action: 'read',
expires: exp
})
.then(signedUrl => console.log(`Signed url: ${signedUrl} retrieved.`))
.then(error => console.log(`Failed to retrieve signed url: ${error}`))

函数日志中的输出为:

2017年10月9日

上午1:17:43.087outlined_flag
功能名称功能执行耗时2353毫秒,完成时状态为:"ok">

上午1:17:43.075信息
功能名称检索签名的url失败:错误:过期日期不能在过去。

上午1:17:43.068信息
功能名称正在获取签名的url,该url将于2017年10月8日18:22:43到期。当前时间2017年10月8日18:17:43

这很奇怪,因为在日志中,当我打印出到期日期和当前日期时,很明显到期日期不是过去的(它们按预期相差约5分钟)

我最初的分析是因为Firebase Server中的时间与我的时区不同(我的时区是GMT+7。请注意,日志日期为2017年10月9日,日志消息为2017年8月8日)如果是,那么如何同步时区我真的不在乎使用哪个时区,因为我只想要5分钟的过期时间,并且getSignedUrl()参数中的expires字段不能以毫秒值格式化。(试过了,打印成NaN-NaN-NaN NaN:NaN:NaN)

那么,有什么解决方案吗?如何做到这一点?感谢

p.S.Idk,如果这是相关的:我需要将签名的url传递到kraken.io API中,以进行图像优化、拇指钉创建和基于EXIF的自动旋转)。除了使用签名url之外,其他选项是首先将图像下载到os.tmpdir()文件夹,并在tmp中提供指向该文件的链接,然后在处理完成后调用fs.unlinkSync()但是idk如果图像在os.tmpdir()文件夹中,如何获取url链接

事实证明,它需要采用月-日-年格式。

例如

2017年4月4日,

和我所做的:

2017年4月1日2017

在变量上设置日期时也可能发生此错误,并且此变量在其过期日期后仍然存在:

const signedUrlOptions = { // stale options persist even after expiration date
action: "read",
expires: Date.now() + 1000 * 60 * 10, // invalid date after ten minutes pass
};
const fetchImageUrls = async () => {
const [signedUrl] = await storage.bucket().file("filename").getSignedUrl(signedUrlOptions);
return signedUrl;
};

在该示例中,您需要确保创建";新鲜的";日期未过期的选项:

const fetchImageUrls = async () => {
const signedUrlOptions = { // create fresh options here when calling the function
action: "read",
expires: Date.now() + 1000 * 60 * 10, // always a valid date now
};
const [signedUrl] = await storage.bucket().file("filename").getSignedUrl(signedUrlOptions);
return signedUrl;
};

相关内容

  • 没有找到相关文章

最新更新