はじめに
はじめまして。
今日は、Bibi Epubリーダーを利用して、Amazon S3 に格納されている Epub ファイルを表示する機会があったので、その際の知見を共有しようと思います。
なぜAmazonS3にファイルを格納するの?
コストや可用性などの面でメリットは多くありますが、AWSのベストプラクティスなのです。(AWS ホワイトペーパーにも記載されてますのでご参考ください。)
問題#1:The Origin of the Path of the Book Is Not Allowed
Bibi EPUB リーダーはOrigin-Pathが許可されないと電子書籍を読み取ることができません。
対応方針:
Bibi Epubリーダー のソースの中に bibi/presets/default.js
ファイルを編集します。
143 行目に trustworthy-origins
の項目があり、ここに S3 バケットの URL を入力すれば、解決できます。
問題#2:Failed to open the book (probably CORS Blocked)
対応方針:
クロスオリジンのため、S3 バケット側にCORS設定で解決できます。
CORS 設定例は以下でご参照ください。
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"https://yoursite"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
問題#3:Data Invalid as a folder: 403 Forbidden
このエラーは、S3バケットにある電子書籍が解凍してないため、Bibi EPUB リーダーで読み取ることができないことを示しています。
1. 電子書籍の自動解凍
S3 イベントのトリガーを追加して、Lambda 関数経由で自動的に電子書籍を解凍し、元の S3 バケットへ再アップロードします。
2. コンテンツタイプ
S3 バケットへ解凍した電子書籍をアップロードするとファイルのContent-Typeは binary/octet-stream
になります。XMLやJPG等のファイルも含まれますが、これらは text/xml
、image/jpeg
になります。
正しいコンテンツタイプを設定しないと読み取れません。
サンプルコードはページの最後にある[参照リンク]をご参照ください。
3. 結果
最後に
もし上記の問題を解決できなければ、コメントいただけると非常に助かります!
最後までご覧いただいてありがとうございました。
参照リンク
- Bibi |Epub Reader:https://bibi.epub.link/
- 電子書籍の解凍のサンプルソースコード:https://github.com/ci-team-cwa/bibi-epub-read-from-s3/blob/main/lambda/lambda_function.py