AWS Lambda/Firehose 是否支持 Base64 URL 解码?
Does AWS Lambda/Firehose support Base64 URL decoding?
我的流水线如下:
Firehose -> Lambda (AWS' Java SDK) -> (S3 & Redshift)
未编码(原始)JSON 记录已提交至 Firehose。然后它会触发一个 Lambda 函数,对其进行轻微的转换。然后 Firehose 将转换后的记录放入 S3 存储桶和 Redshift。
Firehose 要将转换后的数据添加到 S3,需要对数据进行 Base64 编码(并且 Firehose 在将其添加到 S3 之前对其进行解码)。
但是,我在数据中有一个 URL,当解码时,=
字符被替换为它们的等效 unicode 字符 (\u003d
),因为它是Amazon 的 Base64 解码器用作填充。
https://www.[snipped].com/...?returnurl\u003dnull\u0026referrer\u003dnull
如何在解码数据中保留那些 =
个字符?
注意:我试过使用Base64.getUrlEncoder()
,但AWS似乎只支持Base64.getEncoder()
。
事实证明,我在(反)序列化我的 Lambda 记录时使用的 JSON 库 (Gson) 启用了 HTML 转义。要修复它,我只需要禁用 HTML 转义:
new GsonBuilder().disableHtmlEscaping().create();
我的流水线如下:
Firehose -> Lambda (AWS' Java SDK) -> (S3 & Redshift)
未编码(原始)JSON 记录已提交至 Firehose。然后它会触发一个 Lambda 函数,对其进行轻微的转换。然后 Firehose 将转换后的记录放入 S3 存储桶和 Redshift。
Firehose 要将转换后的数据添加到 S3,需要对数据进行 Base64 编码(并且 Firehose 在将其添加到 S3 之前对其进行解码)。
但是,我在数据中有一个 URL,当解码时,=
字符被替换为它们的等效 unicode 字符 (\u003d
),因为它是Amazon 的 Base64 解码器用作填充。
https://www.[snipped].com/...?returnurl\u003dnull\u0026referrer\u003dnull
如何在解码数据中保留那些 =
个字符?
注意:我试过使用Base64.getUrlEncoder()
,但AWS似乎只支持Base64.getEncoder()
。
事实证明,我在(反)序列化我的 Lambda 记录时使用的 JSON 库 (Gson) 启用了 HTML 转义。要修复它,我只需要禁用 HTML 转义:
new GsonBuilder().disableHtmlEscaping().create();