前提
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 コメント