为AList V3添加在线epub预览支持教程

为AList V3添加在线epub预览支持教程

本文章同步发布于我的个人博客:
萌萌哒赫萝的小站

AList V3是一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs开发。

AList的默认预览功能中,并不支持epub格式电子书的在线预览,经过我的摸索,成功基于epub.js项目,为AList添加了epub的预览支持,效果如下所示:

image.png

下面,我就介绍一下如何进行搭建。

说明

类似于pdf.js,一些不支持CORS的相关云盘无法预览,比如阿里云盘。

此外,如果未使用https,也可能会出问题,请提前为域名部署证书。

文件加载速度与网速密切相关,如果是200M以上的全本小说可能需要数分钟的时间,请耐心等待。

动图演示

效果.gif

工具准备

首先我们需要准备以下文件,js和css可以通过CDN链接的方式引入html文件或者下载到需要部署的本地服务器目录内。

部署

修改Nginx设置

在自己的AList网站根目录下,新建一个epub目录,将刚才下载的文件复制进来并修改用户和用户组为www:www

在部署Alist时,根据官方指南,我们设置了如下的反向代理,这会使得我们新添加的epub目录也被转发。

location / {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Range $http_range;
  proxy_set_header If-Range $http_if_range;
  proxy_redirect off;
  proxy_pass http://127.0.0.1:5244;
  # the max size of file to upload
  client_max_body_size 20000m;
}

因此,我们需要添加如下一行来进行排除。

location /epub/ {}

修改spreads.html文件

如果将js文件和css文件都下载在了本地服务器,请修改对应部分的引入代码为本地相对路径,例如放在同一目录下时:

  <script src="./jszip.min.js"></script>
  <script src="./epub.min.js"></script>
  <link rel="stylesheet" type="text/css" href="examples.css">

AList V3在返回预览链接时,返回的是直链地址,epub.js在解析时会尝试请求/META-INF/container.xml这个文件导致报错,因此我们需要修改读取方式为ArrayBuffer。

原代码为:

var params = URLSearchParams && new URLSearchParams(document.location.search.substring(1));
var url = params && params.get("url") && decodeURIComponent(params.get("url"));
var currentSectionIndex = (params && params.get("loc")) ? params.get("loc") : undefined;
var book = ePub(url || "https://s3.amazonaws.com/moby-dick/moby-dick.epub");

修改为:

var params = URLSearchParams && new URLSearchParams(document.location.search.substring(1));
var currentURL = window.location.href;
//请修改test.com为你自己的AList域名
var urlPrefix = "https://test.com/epub/spreads.html?url=";
var url = currentURL.substring(urlPrefix.length);
var currentSectionIndex = (params && params.get("loc")) ? params.get("loc") : undefined;
let blob = fetch(url).then((res) => res.blob());
var book = ePub(blob.then((blob) => blob.arrayBuffer()), {
		restore: true,
		reload: true,
		spreads: true
});

修改AList预览设置

在原预览设置的json文件内添加如下键值对,注意修改test.com为你自己的AList域名。

"epub": {
		"epub.js":"https://test.com/epub/spreads.html?url=$url"
	},

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌萌哒赫萝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值