文件转换之后无法从api访问转换后的文件
问题
当我们调用onlyoffice转换我们想要的文件之后,访问api返回的地址为403
解决方法
通过nginx转发office的缓存文件实现访问转换后的文件。
找到服务器所在的onlyoffice的lib目录并将其通过nginx转发
原理:
<onlyoffice的lib目录路径>/documentserver/App_Data/cache
为onlyoffice的缓存文件存放位置,而onlyoffice转换后的文件将存放在<onlyoffice的lib目录路径>/documentserver/App_Data/cache/files/data
里;
具体文件路径在请求中有明确标识,上图为例,则转换后的文件路径为<onlyoffice的lib目录路径>/documentserver/App_Data/cache/files/data/conv_12_pdf/output.pdf/o206V6-VeAmjorDZz21PgrJy56PU_0193895a-3feb-409a-9cd8-481b42aacda7.pdf
如果您通过docker安装的onlyoffice,则docker容器里面的onlyoffice的lib目录在/var/lib/onlyoffice
,您需要把容器里的/var/lib/onlyoffice
目录挂载到服务器本地。
或者配置onlyoffice容器里的nginx,把容器里的/var/lib/onlyoffice
目录转发出来,但是同时需要把容器的端口暴露。
这里以9002端口转发为例。
其中,docker容器里面的onlyoffice的/var/lib/onlyoffice
挂载到本地的/app/onlyoffice/DocumentServer/lib
;
server {
listen 9002;
charset utf-8;
location / {
root /app/onlyoffice/DocumentServer/lib/documentserver/App_Data/cache/files/data;
#autoindex on; // 开启/关闭目录列表功能
#autoindex_exact_size off; // 关闭/打开显示文件的确切大小
#autoindex_localtime on; // 使用本地时间格式显示文件的时间信息,而不是GMT时间
}
}
可以开启以下配置来测试nginx是否配置成功
autoindex on
:开启目录列表功能,当访问9002端口时,会显示服务器下该目录(/app/onlyoffice/DocumentServer/lib/documentserver/App_Data/cache/files/data
)下的文件和子目录列表。autoindex_exact_size off
:关闭/打开显示文件的确切大小,只显示文件大小的单位(如KB、MB等),不显示具体的数值。autoindex_localtime on
:使用本地时间格式显示文件的时间信息,而不是GMT时间。如果配置了
autoindex on;
,则访问9002端口是会显示目录下的文件和目录
重启nginx
nginx -s reload
总结
通过配置nginx,将主机上onlyoffice的lib目录转发,可以通过访问http://<你的 OnlyOffice 主机>:<配置的端口>/
地址,相当于访问在OnlyOffice 主机访问nginx所配置的文件目录(即主机上onlyoffice的lib目录)。
以上只提供用nginx无权限校验访问onlyoffice转换的文件;您也可以通过java/python实现的后端或者配置nginx实现您想要的效果。