当我试图调用Lambda函数(下面是我的代码(时,我在CloudWatch日志中收到一个错误,说输入不是有效的Base-64字符串。
String payload = "xxxxxxxxxxx";
SdkBytes payloadBytes = SdkBytes.fromUtf8String(payload);
String routingUri = getRoutingUri();
InvokeRequest invokeRequest = InvokeRequest.builder()
.functionName(routingUri)
.payload(payloadBytes)
.invocationType("RequestResponse")
.build();
InvokeResponse result = lambdaClient.invoke(invokeRequest);
Error : System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
我尝试了各种方法在Base-64中对请求进行编码,但似乎什么都不起作用
- 我的AWS SDK版本是2.15.14
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.14</version>
</dependency>
请帮忙。
这里需要使用java.util包中的Base64.Encoder对字符串进行结束编码
这取决于您在有效负载中设置的数据类型,例如,如果您发送调用的变量之一是字节[],您会像一样执行
public byte[] invokeFunction(byte[] data,String certificate_serial) {
String dataBase64 = Base64.getUrlEncoder().encodeToString(data);
// Need a SdkBytes instance for the payload
SdkBytes payload = SdkBytes.fromUtf8String("{n" + " "nameOfTheVariableInTheLambdaYouAreInvoking": "" + dataBase64 + "" n" + "}");