0

これが問題に関連し、私のクラウド機能のコードスニペットです: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リンクを取得する方法。

答えて

0

これは、月 - 日 - 年の形式である必要があることが判明しました。例

01-04-2017 for Apr 4th, 2017

と私がやったの場合

01-04-2017 for Jan 1st, 2017

+0

また、UNIXの時刻形式としてエポックの後、すなわち秒有効期限を指定することができます。たとえば、5分間の有効期限を設定するには、Date.now()+ 5 * 60 * 1000'を使用します。 – gnuf

+0

より正確には、configオブジェクトに渡された値はJavascriptの 'Date()'コンストラクタに渡されます。 1つの引数バージョンは、エポック後のミリ秒を想定しています。基礎となるGoogleエンドポイントは、エポック後の*秒*、Node.jsクライアントAPIが実行する変換を想定しています。 – gnuf

関連する問題