概要
AWS LambdaでS3イベントを処理する時に、イベントデータからオブジェクト名を取り出す時の処理を解説しました。
例の処理
S3イベントをトリガーに実行する Lambda Function で、イベントデータからオブジェクトのキーを取得する時のこの処理、
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
これは何をしてるんでしょう。
試してみる
こんな感じで処理の途中経過をログに出力するようにして、いくつかファイルをバケットに入れてみます。
console.log('original = ' + event.Records[0].s3.object.key);
console.log('replaced = ' + event.Records[0].s3.object.key.replace(/\+/g, ' '));
console.log('decoded = ' + decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')));
結果
その1
original = readme.txt
replaced = readme.txt
decoded = readme.txt
その2
original = %E3%81%93%E3%81%93%E3%81%AB%E2%86%92+%E2%86%90%E7%A9%BA%E7%99%BD.txt
replaced = %E3%81%93%E3%81%93%E3%81%AB%E2%86%92 %E2%86%90%E7%A9%BA%E7%99%BD.txt
decoded = ここに→ ←空白.txt
まとめ
ということで、
-
replace(/\+/g, ' ')
は「+」に変換されていた空白を元に戻す処理 -
decodeURIComponent()
はURLエンコードされていたマルチバイト文字のファイル名をデコードする処理
でした。