В приложении, над которым я работаю, есть процесс, с помощью которого пользователь может загрузить CSV или PDF-версию своих данных. Генерация работает отлично, но я пытаюсь загрузить файл и сталкиваюсь с разными проблемами. Мы используем API Gateway для всех запросов, и генерация происходит внутри лямбды по запросу POST
. Конечная точка GET
принимает параметр file_name
, затем создает путь в S3, а затем делает запрос непосредственно там. Проблема в том, что я пытаюсь изменить ответ. Я получаю ошибку 500, и когда я просматриваю логи, там написано Execution failed due to configuration error: Unable to transform response
. Итак, я именно там и провел большую часть своего времени. Я попробовал по крайней мере 50 различных итераций шаблонов и комбинаций с небольшим успехом. Наиболее близким я получил следующий код, в который CSV загружается нормально, но PDF больше не является допустимым PDF:
CSV:
#set($contentDisposition = "attachment;filename=${method.request.querystring.file_name}")
$input.body
#set($context.responseOverride.header.Content-Disposition = $contentDisposition)
PDF:
#set($contentDisposition = "attachment;filename=${method.request.querystring.file_name}")
$util.base64Encode($input.body)
#set($context.responseOverride.header.Content-Disposition = $contentDisposition)
, где contentHandling = CONVERT_TO_TEXT
. Мой двоичныйMediaTypes просто имеет application/pdf
и все. Моя цель - заставить это работать без необходимости выгрузки проблемы в лямбду, чтобы у нас не было таких накладных расходов на этапе загрузки. Есть идеи, как сделать это правильно?
Так же, как еще один комментарий, я попробовал CONVERT_TO_BINARY
и просто оставил его как Passthrough
. Я пробовал это с text/csv
как другой тип двоичного носителя, и я пробовал разные комбинации кодирования и декодирования base64 и прочего. Я знаю, что данные возвращаются прямо с S3, но преобразование - то, где оно ломается. Я рад опубликовать больше журналов, если это будет необходимо. Кроме того, я почти уверен, что это имеет смысл для StackOverflow, но если он лучше подходит для другого сайта StackExchange, пожалуйста, дайте мне знать.
Ресурсы, на которые я смотрел:
РЕДАКТИРОВАТЬ: Одна идея, которая у меня была, - сделать CONVERT_TO_BINARY
и каким-то образом base64 кодировать CSV в преобразовании, но я не могу понять, как это сделать правильно. Я продолжаю чувствовать, что я неправильно понимаю порядок вещей, особенно когда происходит "CONVERT" часть. Если это имеет какой-то смысл.
РЕДАКТИРОВАТЬ 2: Итак, я избавился от $util.base64Encode
в PDF, и теперь у меня есть пустой PDF. В настоящем файле S3 определенно есть что-то, но по какой-то причине CONVERT_TO_TEXT
не справляется с этим правильно, или я все еще не понимаю, как все это работает.