我的管道如下:
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();
关于java - AWS Lambda/Firehose 是否支持 Base64 URL 解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51385855/