火力地堡云存储getSignedUrl到期日不能是过去(火力地堡云功能)

火力地堡云存储getSignedUrl到期日不能是过去(火力地堡云功能)

问题描述:

这是与问题相关的我的云功能的代码片段:火力地堡云存储getSignedUrl到期日不能是过去(火力地堡云功能)

// 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}`)) 

在功能日志的输出是:

Oct 9, 2017

1:17:43.087 AM outlined_flag
FUNCTIONS_NAME Function execution took 2353 ms, finished with status: 'ok'

1:17:43.075 AM info
FUNCTIONS_NAME Failed to retrieve signed url: Error: An expiration date cannot be in the past.

1:17:43.068 AM info
FUNCTIONS_NAME Fetching signed url which expires at 08-10-2017 18:22:43. Current time 08-10-2017 18:17:43

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

我最初的分析是因为Firebase服务器中的时间与我的时区不同(我的时间是GMT + 7)。请注意,日志日期为2017年10月9日,日志消息为2017年10月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链接。

事实证明,它需要以月 - 日 - 年的格式。

例如

01-04-2017 for Apr 4th, 2017

和我所做的:

01-04-2017 for Jan 1st, 2017

+0

您也可以指定到期时间为UNIX时间格式,即时代后秒。例如,对于五分钟过期,您可以使用'Date.now()+ 5 * 60 * 1000' – gnuf

+0

更确切地说,传递给config对象的值传递给Javascript'Date()'构造函数。它的一个参数版本预计在时代后几毫秒。底层的Google端点预计在纪元之后的*秒*,即Node.js客户端API执行的转换。 – gnuf