KKFileView 服务访问 Paperless-NGX 的文件会遇到跨域和需要鉴权的问题。为了使 Paperless-NGX 和 KKFileView 能够通过同一个域名提供服务,我们需要配置 Nginx 反向代理。
server {
listen 1234;
server_name pl.taro.com;
location /kk/ {
proxy_pass http://192.168.50.10:8012/kk/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass http://192.168.50.10:8000/;
# Adjust host and port as required.
# These configuration options are required for WebSockets to work.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
add_header Referrer-Policy "strict-origin-when-cross-origin";
}
}
将 Paperless 提供的页面映射到 http://pl.taro.com:1234/
下,将 KKFileView 提供的映射到 http://pl.taro.com:1234/kk/
下。
在 paperless-ngx/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html
中增加一个按钮,设置链接为 KKFileView 预览链接为: http://pl.taro.com:1234/kk/onlinePreview?url={文件链接}
。
参考文档 https://docs.paperless-ngx.com/setup/#docker_build。
在 docker-compose.env
中配置:
PAPERLESS_URL=http://pl.taro.com:1234
运行 docker compose build
构建镜像。
运行 docker compose up
创建和运行容器。
由于图片外的其他文件不在浏览器中直接加载,而是需要 KKFileView 服务端下载处理后才返回给浏览器,为了使 KKFileView 服务器能访问 Paperless 的文件,下面是使用 cookies 获得访问权限的解决方案:
在 kkFileView/server/src/main/java/cn/keking/model/FileAttribute.java
文件中,增加一个 cookies 参数。
在 kkFileView/src/main/java/cn/keking/service/FileHandlerService.java
中,在解析请求时,将请求中的 cookies 保存。
在 kkFileView/src/main/java/cn/keking/utils/DownloadUtils.java
中下载请求中添加保存的 cookies。
在 KKFileView 文件夹下增加 docker-compose.yml
文件,配置 KKFileView 的 URL 和路径:
services:
kkviewer:
image: kkfileview:4.4.0
container_name: kkviewer
ports:
- "8012:8012"
environment:
- KK_BASE_URL=http://pl.taro.com:1234/kk/
- KK_CONTEXT_PATH=/kk/
运行 mvn clean package -DskipTests
编译 KKFileView 的 Java 代码并打包。
运行 docker build --tag kkfileview:4.4.0 .
构建 Docker 镜像。
运行 docker compose up
创建和运行容器。
由于 Paperless-NGX 和 KKFileView 是分别独立部署的,所以在 KKFileView 预览文件时,仍然需要通过网络请求访问文件,下载拷贝,然后做相应处理。因此,预览打开的速度相较于 Paperless 内部的预览会更慢。
未来可以修改 KKFileView,使之通过 URL 传入 Paperless 文档 ID,后通过调用 Paperless API 读取 Paperless 中的原文件。