これが問題に関連し、私のクラウド機能のコードスニペットです:FirebaseクラウドストレージgetSignedUrlの有効期限が過ぎ(Firebaseクラウド機能)にすることはできません
// 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 Serverの時刻が私のタイムゾーンと異なるためです(私のGMT + 7です)。ログの日付は10月9日(2017)で、ログのメッセージは10月8日(2017)です。 そうなら、タイムゾーンを同期する方法は?私が欲しかったのは、ちょうど5分満了時間で、getSignedUrl()
のexpires
フィールドのパラメータは、ミリ秒の値でフォーマットできません。 (試して、それはNaN-NaN-NaN NaN:NaN:NaN
として印刷されています)
これは何か解決策はありますか?そしてそれをどうやってやるの?ありがとう
P.S. Idkの場合:画像最適化、サムネイル作成、EXIFベースの自動回転を行うには、署名されたURLをkraken.io APIに渡す必要があります。署名付きURLを使用する以外のオプションは、画像を最初にos.tmpdir()
フォルダにダウンロードし、そのファイルへのリンクをtmpに提供し、処理が完了した後にfs.unlinkSync()
に電話することです。 idk画像がos.tmpdir()
フォルダにある場合、URLリンクを取得する方法。
また、UNIXの時刻形式としてエポックの後、すなわち秒有効期限を指定することができます。たとえば、5分間の有効期限を設定するには、Date.now()+ 5 * 60 * 1000'を使用します。 – gnuf
より正確には、configオブジェクトに渡された値はJavascriptの 'Date()'コンストラクタに渡されます。 1つの引数バージョンは、エポック後のミリ秒を想定しています。基礎となるGoogleエンドポイントは、エポック後の*秒*、Node.jsクライアントAPIが実行する変換を想定しています。 – gnuf