【发布时间】:2018-03-19 23:29:08
【问题描述】:
这是我与问题相关的云函数代码sn-p:
// 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.087 概述标志
FUNCTIONS_NAME 函数执行耗时 2353 毫秒,完成状态为:'ok'上午 1:17:43.075 信息
FUNCTIONS_NAME 检索签名网址失败:错误:过期日期不能是过去的日期。上午 1:17:43.068 信息
FUNCTIONS_NAME 获取在 2017 年 8 月 10 日 18:22:43 到期的签名 URL。当前时间 08-10-2017 18:17:43
这很奇怪,因为在日志中,当我打印出过期日期和当前日期时,很明显过期日期不是过去的(按预期它们相差约 5 分钟)
我最初的分析是因为 Firebase Server 中的时间与我的时区不同(我的是 GMT+7。请注意日志日期是 2017 年 10 月 9 日,日志消息是 2017 年 10 月 8 日)。 如果是这样,那么如何同步时区?我真的不在乎使用哪个时区,因为我想要的只是 5 分钟到期时间,以及expires getSignedUrl() 参数中的字段不能以毫秒值格式化。 (试了一下,打印为NaN-NaN-NaN NaN:NaN:NaN)
那么,有什么解决办法吗?怎么做?谢谢
附: Idk 如果这是相关的:我需要将签名的 url 传递到 kraken.io API 以进行图像优化、缩略图创建和基于 EXIF 的自动旋转)。除了使用签名 url 之外的其他选项是首先将图像下载到 os.tmpdir() 文件夹,并在 tmp 中提供该文件的链接,并在该过程完成后调用 fs.unlinkSync()。 但是如果图像在os.tmpdir() 文件夹中,我知道如何获取 url 链接。
【问题讨论】:
标签: node.js datetime firebase firebase-storage google-cloud-functions