ApiGateway + LambdaのExpressで画像も配信したら表示されなかったのでその時の対応メモ
画像のヘッダを見るとcontent-typeがtext/jsonで配信で配信されていた。
https://github.com/awslabs/aws-serverless-express/issues/104
と同じ現象らしい
aws-serverless-expressの記述変更
まずaws-serverless-expressの記述を書き換える。
const server = awsServerlessExpress.createServer(app)
を
const binaryMimeTypes = [
'image/png',
'image/x-icon'
];
const server = awsServerlessExpress.createServer(app, null, binaryMimeTypes)
に変更した。
今回、faviconとpngしか使っていなかったので該当2つしか記述していないがjpgなど必要に応じて追加する感じ。
この状態でもう一度アップするとヘッダが変化し
content-typeがimage/pngで配信されるようになったが、まだ画像は表示されず。
今度はデータがBase64にエンコーディングされている。
どうもAPIGateway側でもバイナリメディアタイプの設定が必要らしい。
API Gatewayの設定
API Gatewayの設定のバイナリメディアタイプを追加してやる。
![スクリーンショット 2018-07-21 15.00.40.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F10489%2F0d1ec72d-9798-0b94-da00-85e7a42697e6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3f916d0f5a1e1b4657ab92b23700867d)
![スクリーンショット 2018-07-21 13.35.06.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F10489%2Fdb4c642c-e63b-5915-f50b-8451bcae2e4c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7c19fee705b72077d2790e177818c6f6)
これで画像が表示できるようになりました。
web画面でやる場合、手順と反映が明確出ないので余計な労力が要りますね。