Я использую бессерверную лямбда-функцию Golang за API Gateway. Шлюз API настроен на прокси ЛЮБОЙ функции Lamdba.
Он функционирует как REST API, возвращающий JSON внешнему интерфейсу. Нам нужно было сгенерировать PDF-файл по одному из маршрутов и вернуть его. Это прекрасно работает при локальном запуске Golang HTTP-сервера, но не работает на AWS.
Я уже прочитал и реализовал двоичные данные на шлюзе API. Здесь царапина на голове выглядит следующим образом:
- Типы двоичных данных не включены в API GW - Rest api возвращает JSON работает, PDF возвращается, но поврежден.
- Включить двоичный тип данных «application / pdf» - возврат api rest JSON работает, PDF возвращается, но поврежден.
- Включить тип двоичных данных «* / *» - API GW возвращает 500 при обычном предварительном запросе OPTIONS (CORS) и не работает, PDF работает отлично.
Если я посмотрю на полезные данные, возвращаемые по этим запросам, local возвращает данные, начинающиеся с JVBER, и работает. API-шлюз без двоичных типов данных возвращает полезную нагрузку в кодировке base64, которая при декодировании также выглядит как PDF-файл, начинающийся с JVBER, но усеченный и поврежденный.
сокращенно Golang функция:
"github.com/jung-kurt/gofpdf"
func Print(w http.ResponseWriter, r *http.Request) {
pdf := gofpdf.New("P", "mm", "A4", "")
pdf.AddPage()
pdf.SetFont("Arial", "B", 16)
pdf.SetXY(10, 5)
pdf.Cell(30, 15, "Stack Overflow")
//Set header
w.Header().Set("Content-type", "application/pdf")
w.Header().Set("content-disposition", "inline")
pdf.Output(w)
}
CORS реализован следующим образом:
cors := cors.New(cors.Options{
AllowedOrigins: []string{"*.blah.net"},
AllowedMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodOptions, http.MethodDelete},
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", "Set-Cookie"},
AllowCredentials: true,
MaxAge: 1800,
})
r.Use(cors.Handler)
Когда для двоичных типов данных установлено значение «* / *», запрос cors завершается неудачно в журналах следующим образом:
Method request body before transformations: [Binary Data]
Execution failed due to configuration error: Unable to transform response
Что я здесь не хватает?