0

這是與問題相關的我的雲功能的代碼片段:火力地堡雲存儲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鏈接。

回答

0

事實證明,它需要以月 - 日 - 年的格式。

例如

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