Lambdaプロキシ統合にてダウンロードしたPDFが壊れてしまう

前提

AWSのAPIGatewary+Lambdaを使用してPDFファイルのダウンロード機能を実装しています。

  • APIGatewaryとLambdaは、Lambdaプロキシ統合にて連携
  • APIGatewayの設定にある「バイナリメディアタイプ」に application/pdf を追加

発生している問題・エラーメッセージ

クライアントのWebシステムから対象APIGatewayのURLにてダウンロードを実行した際、作成されるPDFファイルが壊れていると言われ開けません。

APIGatewayの設定にある「バイナリメディアタイプ」を */* とすることで、正常なダウンロードとなることは確認できました。
但し、これだと他APIで行っているJSON受信がおかしくなってしまうので問題があります。

該当のソースコード

javascript

exports.handler = async (event) => { try { const contentType = "application/pdf" const buffer = "<ここにはPuppeteerでPDFを作成した結果の文字列が設定される>" const base64 = buffer.toString("base64") return { "statusCode": 200, "headers":{ "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers" : "Content-Disposition", "Content-Length": Buffer.byteLength(base64), "Content-Type": contentType, "Content-Disposition": "attachment; filename=download.pdf" }, "isBase64Encoded": true, "body": base64 } } catch (error) { console.log(error) throw error } }

試したこと

  • 前述の通り「バイナリメディアタイプ」を */* とすることで、正常なダウンロードができた
  • Lambda側の「Content-type」とAPIGatewayの「バイナリメディアタイプ」を application/octet-stream としたがダメだった

解決したいこと

指定したメディアタイプ(PDF)のみ上手く処理されるようにしたいのですが、原因と対策がわからず困っております。

コメントを投稿

0 コメント