這是與問題相關的我的雲功能的代碼片段:火力地堡雲存儲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鏈接。
您也可以指定到期時間爲UNIX時間格式,即時代後秒。例如,對於五分鐘過期,您可以使用'Date.now()+ 5 * 60 * 1000' – gnuf
更確切地說,傳遞給config對象的值傳遞給Javascript'Date()'構造函數。它的一個參數版本預計在時代後幾毫秒。底層的Google端點預計在紀元之後的*秒*,即Node.js客戶端API執行的轉換。 – gnuf