Лямбда-двоичное кодирование полезной нагрузки в Go

# #http #go #aws-lambda #aws-api-gateway

Вопрос:

Я пытаюсь написать лямбду, которая вернет a .WAV-файл в виде фрагментов по HTTP. У меня есть мои фактические данные в байтовом срезе ( 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^@Dlt;ACgt;^@^@^Plt;B1gt;^B^@^D^@^P^@data^@^?^C^@ESC^@^Y^@  

В то время как загруженный файл выглядит следующим образом:

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

Я предполагаю, что у меня где-то проблема с кодировкой. Я подозреваю, что проблема заключается в преобразовании строк, но это тип переменной, который мне нужен для компонента APIGatewayProxyResponse «Тело». Как изменить вывод кода, чтобы убедиться, что полезная нагрузка соответствует исходному файлу?

Комментарии:

1. Вы заставили это работать на местном уровне?

2. @DanielFarrell Не пробовал этого, но я понимаю, к чему вы клоните — может быть, изолировать проблему как функцию или что-то, происходящее в API-шлюзе? Посмотрим, смогу ли я создать локальную версию.