Настройка AWS API GATEWAY для возврата двоичного pdf-файла из lambda - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу вернуть pdf из функции AWS Lambda, и я использую API Gateway для вызова его из любого браузера.

У меня есть лямбда-функция aws в c #, которая возвращает ответ шлюза API, тело которого является pdf в base64 encoded string.

Пока конечная точка возвращает файл с расширением .pdf, но не в двоичном формате. Вместо этого - текстовый файл со строкой base64.

Заголовки, которые я возвращаю из кода c #:

  var headersDic = new Dictionary<string, string>();
      headersDic.Add("Content-type", "application/pdf");
      headersDic.Add("Content-disposition", "attachment; filename=file.pdf");

Я вручную преобразовал строку base64 в двоичный файл и открыл ее в формате pdf, и она работает, я имею в виду, строка base64 верна, поэтому я предполагаю, что проблема заключается в шлюзе API.

В консоли ответа интеграции шлюза API я получил следующее:

enter image description here

Но я не могу заставить его работать.

У меня также включены двоичные типы носителей.

enter image description here

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вам также нужно объявить тип контента, как показано ниже в вашем LambdaEntryPoint.cs

См. Эту документацию: https://github.com/aws/aws-lambda-dotnet/blob/master/Libraries/src/Amazon.Lambda.AspNetCoreServer/README.md

Ты должен сказать Лямбде, что собираешься вернуть что-то кроме строк.

public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{

    protected override void Init(IWebHostBuilder builder)
    {
        builder
            .UseStartup<Startup>();

        ****IMPORTANT PART HERE****
        RegisterResponseContentEncodingForContentType("application/pdf",
            ResponseContentEncoding.Base64);
    }
}
0 голосов
/ 04 сентября 2018

Я не знаю точно, что я сделал, но я удалил метод 'ALL' и создал метод 'GET' с этой конфигурацией, и теперь он работает.

enter image description here

...