Aws lambda 在API网关上将base64字符串作为应用程序/pdf处理为单个端点
正如您所期望的,我们有一个具有多个不同端点的API。我们需要添加一个新的端点,该端点将返回一个application/pdf以及文件数据 为此,我们返回以下内容:Aws lambda 在API网关上将base64字符串作为应用程序/pdf处理为单个端点,aws-lambda,aws-api-gateway,serverless,api-gateway,Aws Lambda,Aws Api Gateway,Serverless,Api Gateway,正如您所期望的,我们有一个具有多个不同端点的API。我们需要添加一个新的端点,该端点将返回一个application/pdf以及文件数据 为此,我们返回以下内容: return { statusCode: 200, headers: { 'Content-Type': 'application/pdf', 'Content-disposition': `attachment; filename=${filename}.pdf
return {
statusCode: 200,
headers: {
'Content-Type': 'application/pdf',
'Content-disposition': `attachment; filename=${filename}.pdf`,
'Accept': 'application/pdf',
},
body: fileData,
isBase64Encoded: true,
};
isBase64Encoded
仅在API网关中设置二进制媒体类型时才起作用。详情如下:
我们遇到的问题是,通过在API网关上将二进制媒体类型设置为*/*(无空格),这反过来会影响API上的所有其他端点
示例这会在选项cors检查中中断一个端点,无理由返回InternalServerErrorException。该端点只是一个GET,请求中没有数据
这是否意味着我们只需要为这一个端点使用一个单独的API,或者有没有办法将其包含在同一个APIG中
为了进一步澄清,这是一篇在请求中包含少量JSON的帖子:
{“someValue”:1234}
并返回上述应用程序/pdf内容类型。我正在处理这个问题,并像这样解决它:
这将打开一个下载窗口,让您将文件保存到本地我正在解决此问题,并按如下方式解决此问题:
这将打开一个下载窗口,让您在本地保存文件您是否解决了此问题?我接近解决它的唯一方法是将端点从代理lambda集成切换到非代理lambda集成。虽然这会引发它自己的问题。你解决了这个问题吗?我接近解决它的唯一方法是将端点从代理lambda集成切换到非代理lambda集成。尽管这会引发它自己的问题。
const sendRes = (status:number, body:any) => {
var response = { statusCode: status, headers: { "Content-Type": "application/json" }, body: JSON.stringify(body) };
return response;
};
return sendRes(201, {pdf:your-base64-string} );
let res = await this.$store.dispatch('pdf/makePdf')
const linkSource = `data:application/pdf;base64,${res.data.pdf}`;
const downloadLink = document.createElement("a");
const fileName = "your-pdf-filename.pdf";
downloadLink.href = linkSource;
downloadLink.download = fileName;
downloadLink.click();