Golang Лямбда-функция на AWS Шлюз API не возвращает PDF - PullRequest
0 голосов
/ 20 июня 2020

Я использую бессерверную лямбда-функцию 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

Что я здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...