AList V3是一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs开发。
AList的默认预览功能中,并不支持epub格式电子书的在线预览,经过我的摸索,成功基于epub.js项目,为AList添加了epub的预览支持,效果如下所示:
下面,我就介绍一下如何进行搭建。
说明
类似于pdf.js,一些不支持CORS的相关云盘无法预览,比如阿里云盘。
此外,如果未使用https,也可能会出问题,请提前为域名部署证书。
文件加载速度与网速密切相关,如果是200M以上的全本小说可能需要数分钟的时间,请耐心等待。
动图演示
工具准备
首先我们需要准备以下文件,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"
},
Comments 2 条评论
博主 默
方便问一下大佬为什么我的alist无法打开pdf.js的问题么?
博主 赫萝
@默 一般是跨域的问题