前提
AWSのAPIGatewary+Lambdaを使用してPDFファイルのダウンロード機能を実装しています。
- APIGatewaryとLambdaは、Lambdaプロキシ統合にて連携
- APIGatewayの設定にある「バイナリメディアタイプ」に
application/pdf
を追加 - CloudFrontを使用
発生している問題・エラーメッセージ
クライアントのWebシステムから対象APIGatewayのURLにてダウンロードを実行した際、作成されるPDFファイルが壊れていると言われ開けません。
APIGatewayの設定にある「バイナリメディアタイプ」を */*
とすることで、正常なダウンロードとなることは確認できました。
但し、これだと他APIで行っているJSON受信がおかしくなってしまうので問題があります。
<追記>
CloudFrontを経由しなければ、問題は発生しませんでした。
該当のソースコード
javascript
1 2exports.handler = async (event) => { 3 try { 4 const contentType = "application/pdf" 5 const buffer = "<ここにはPuppeteerでPDFを作成した結果の文字列が設定される>" 6 7 const base64 = buffer.toString("base64") 8 return { 9 "statusCode": 200, 10 "headers":{ 11 "Access-Control-Allow-Origin": "*", 12 "Access-Control-Expose-Headers" : "Content-Disposition", 13 "Content-Length": Buffer.byteLength(base64), 14 "Content-Type": contentType, 15 "Content-Disposition": "attachment; filename=download.pdf" 16 }, 17 "isBase64Encoded": true, 18 "body": base64 19 } 20 21 } catch (error) { 22 console.log(error) 23 throw error 24 25 } 26 27}
試したこと
- 前述の通り「バイナリメディアタイプ」を
*/*
とすることで、正常なダウンロードができた - Lambda側の「Content-type」とAPIGatewayの「バイナリメディアタイプ」を
application/octet-stream
としたがダメだった - CloudFrontのビヘイビア設定にて、ダウンロードのURLについてのみ設定を色々変えてみたが上手くいく設定をみつけられなかった
解決したいこと
指定したメディアタイプ(PDF)のみ上手く処理されるようにしたいのですが、原因と対策がわからず困っております。
<追記>
CloudFrontの設定で何か不足・対策が必要なのかもしれません。
何かご存知の方はコメントください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/30 07:44
2022/08/30 07:47
2022/08/30 08:09
2022/08/30 09:21
2022/09/02 18:36
2022/09/04 06:52
2022/09/08 05:07
2022/09/09 00:20
2022/09/09 04:56