首页 > 解决方案 > Go 中的 Lambda 二进制有效负载编码

问题描述

我正在尝试编写一个 lambda,它将通过 HTTP 以块的形式返回一个 .WAV 文件。我已经在一个字节切片 ( outputPayload [] byte) 中获得了我的实际数据,并试图将其传回。虽然请求似乎正在运行,但收到​​的响应与我预期的长度不同,并且似乎已损坏。这是我的代码:

//Create the necessary headers
responseHeader := make(map[string]string)
responseHeader["Accept-Ranges"] = "bytes"
responseHeader["Content-Range"] = fmt.Sprintf("%s/%d", rangeRequired, fileSize)
responseHeader["Content-Type"] = fileType // this will be "audio/wav"
responseHeader["Content-Length"] = fmt.Sprintf("%d", returnedByteCount)

responseBody := string(outputPayload)
return events.APIGatewayProxyResponse{
    StatusCode: http.StatusPartialContent,
    Headers:    responseHeader,
    Body:       responseBody,
}, nil

作为基本检查,more在命令行中使用,原始文件的开头如下所示:

RIFF$^?^C^@WAVEfmt ^P^@^@^@^A^@^B^@D<AC>^@^@^P<B1>^B^@^D^@^P^@data^@^?^C^@ESC^@^Y^@

虽然下载的文件如下所示:

RIFF$^?^C^@WAVEfmt ^P^@^@^@^A^@^B^@D�^@^@^P�^B^@^D^@^P^@data^@^?^C^@ESC^@^Y^@

我猜我在某个地方遇到了编码问题。我的预感是字符串转换是问题所在,但这是我需要 APIGatewayProxyResponse“Body”组件的变量类型。如何更改我的代码输出以确保有效负载与原始文件匹配?

标签: httpgoaws-lambdaaws-api-gateway

解决方案


推荐阅读