OpenList是著名的开源网盘管理系统AList的开源分支,支持挂载网盘、S3兼容对象存储、本地文件夹等多种数据存储系统,也内置了多种格式文档的在线预览功能。Office文档是OpenList使用中较为常见的文件格式之一,OpenList采用了微软预览API接口以及谷歌预览API接口来实现Office文档的预览功能,但是在国内使用时,微软预览API接口较为不稳定(时而能打开,时而打不开)谷歌API预览接口则由于网络原因根本无法使用,给预览效果造成了极大的不便。BaseMetas Fileview 为企业级文档预览引擎,提供标准化 API、高并发支撑与横向扩展能力,可嵌入 OA、SaaS 等系统。因此,我将尝试安装并部署BaseMetas Fileview,并将其用于OpenList的文档预览功能。
一、在宝塔面板的Docker中安装并配置BaseMetas Fileview
①登录宝塔面板管理后台,点击左侧Docker,然后先点击上方栏目中的“本地镜像”,再点击下方左侧“从仓库中拉取”

②在弹出来的窗口中,先点击“命令拉取”,再复制粘贴下方链接:
docker pull basemetas/fileview:1.5.1
然后点击右边的“执行命令”,当下方命令行界面中显示“bt_succesful”时,可以关闭窗口
提醒:最新版本可前往官网文档处复制(“docker hub”下方的链接)

③此时,BaseMetas Fileview的Docker镜像已经被成功拉取,点击右侧的“创建容器”

④在弹出来的窗口中,进行以下修改(可参考下图),最后点击右下角的“保存”:
1.容器名称:BaseMetas(随意取名)
2.本地端口:9000
3.容器:80
4.对外暴露:打开

⑤现在,通过“服务器IP:9000”的方式已经能够访问到这个Docker项目首页

二、利用域名反向代理Docker中的BaseMetas Fileview项目
①在宝塔面板后台中,点击左侧“网站”,然后点击右侧“添加站点”

②填入想要反向代理Docker中的BaseMetas Fileview项目的域名,“PHP版本”可以选择“纯静态”,然后点击右下角的“确定”

③网站新建完成后,点击右侧的“设置”

④在弹出的窗口中,建议先给网站配置好HTTPS(即左侧的SSL),然后点击左侧的“反向代理”,再点击右侧的“添加反向代理”

⑤在弹出的窗口中,进行以下修改(可参考下图),最后点击右下角的“确定”:
1.代理名称:basemetas(随意取名)
2.目标URL:http://127.0.0.1:9000
3.发送域名:$host

⑥记得在DNS服务商中添加新域名的IP地址解析,稍等片刻,已经可以用域名的方式访问Docker中的BaseMetas Fileview项目了

三、利用域名作为OpenList在线预览文件的“转换器”
①再次点击宝塔面板左侧“网站”,然后点击右侧“添加站点”

②输入一个新域名(或新的二、三……级域名),选择PHP版本(不用太老就行,建议8.0及以上),然后点击右下角的“确定”

③网站新建完成后,点击右侧的“设置”

④在弹出的窗口中,建议先配置好HTTPS(即SSL),然后关闭窗口

⑤点击进入刚刚创建好的网站的根目录

⑥找到“新建”,点击下方的“新建空白文本”

⑦将文件命名为“proxy.php”

⑧找到刚刚新建的“proxy.php”文件,在右侧“更多”中,点击“编辑”

⑨复制粘贴以下代码,并根据实际情况进行修改(可参考下图),然后点击左上角的“保存”:
<?php
$url = $_GET['url'] ?? '';
if ($url === '') {
http_response_code(400);
exit('Missing url');
}
$config = json_encode(
['url' => $url],
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
);
if ($config === false) {
http_response_code(500);
exit('JSON encode error');
}
$data = base64_encode($config);
header(
'Location: https://设置了反向代理的域名(第一个域名)/preview/view?data=' . urlencode($data),
true,
302
);
exit;

⑩记得在DNS服务商中添加新域名的IP地址解析
四、OpenList中增加BaseMetas Fileview的预览选项
①登录OpenList管理员后台,点击左侧“设置”-“预览”,在右侧找到“iframe预览”,并对第一项(doc,docx,xls,xlsx,ppt,pptx)进行修改,增加一行即可(可参考下图):
"doc,docx,xls,xlsx,ppt,pptx": {
"basemetas":"https://刚刚的域名(编辑过文件的第二个域名)/proxy.php?url=$e_url",
"Microsoft":"https://view.officeapps.live.com/op/view.aspx?src=$e_url",
"Google":"https://docs.google.com/gview?url=$e_url&embedded=true"
},

②现在就可以选择一个Office文档进行测试,预览成功
提示:由于服务器性能、带宽的影响,预览服务需要一段时间缓冲转圈圈,请耐心等待哦

五、参考资料
②proxy.php文件代码编写以及bug修复:DeepSeek+ChatGPT


Comments NOTHING