Go编写Lambda返回WAV二进制负载损坏 如何修正编码问题?
问题原因
你遇到的文件损坏问题确实是编码转换导致的:
AWS的APIGatewayProxyResponse的Body字段默认会被当做UTF-8编码的文本处理,你直接将二进制的[]byte强制转为string时,字节切片中不符合UTF-8编码规则的字节会被自动替换为Unicode替换字符�,这就是你看到原始文件中的<AC>、<B1>字节变成乱码的原因,同时替换操作也会导致响应长度不符合预期。
修复方案
只需要调整两处代码即可:
- 开启响应的Base64编码标识,告诉API Gateway需要对你返回的Body做Base64解码后再返回给客户端
- 不对
outputPayload做字符串转换,直接将其编码为Base64字符串后赋值给Body字段
修改后代码如下:
import "encoding/base64" // 确保引入base64包 //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) // 直接将二进制字节编码为Base64字符串 responseBody := base64.StdEncoding.EncodeToString(outputPayload) return events.APIGatewayProxyResponse{ StatusCode: http.StatusPartialContent, Headers: responseHeader, Body: responseBody, IsBase64Encoded: true, // 新增该字段,开启Base64解码标识 }, nil
额外校验项
如果修改后仍然有问题,请确认你使用的API Gateway已经将audio/wav加入了二进制媒体类型列表:
- REST API:需要在API设置的「二进制媒体类型」中添加
audio/wav - HTTP API:默认支持所有二进制类型,无需额外配置
内容的提问来源于stack exchange,提问作者David Fulton
相关产品推荐
相关产品推荐

