在Nextcloud中部署OnlyOffice并设置只读模式
OnlyOffice文档服务的单独安装
大文件问题的解决
只读模式
就我而言,搞OnlyOffice主要是为在线预览,以及缩略图生成等,基本上不会在线编辑。 虽然OnlyOffice现在的兼容性做的很好了,但还是没达到让我放心编辑文件的程度,毕竟本地又不是没有巨硬版。
同时,OnlyOffice又有一个无法关闭的“自动保存”功能,默认情况下基本上是打开之后就开始保存,不小心点一下键盘就是一个新版本存上去的, 倒不是可惜这点硬盘,主要是担心他给我一保存,把一些文件里面的格式弄坏了,或者图片变成低分辨率了,公式无法编辑了等等。
但是,找了半天,无论是onlyoffice document server docker里面的json文件,还是onlyoffice-nextcloud插件, 里面都没有设置只读的选项。只读的功能确实有,但是是在API里面才能使用。 如果你在Nextcloud网页端点击别人共享的没有写权限的文件,那确实是只读,但可写文件就会自动打开写功能。
最后,搜索了大半天之后,在这兄弟的帖子里面找到了灵感: 既然Nextcloud本身在只读共享中可以打开只读界面,那么这个接口一定是存在的,不过是没开放给设置,那我们可以直接改PHP源码啊。
上面兄弟的帖子比较老了,找了一下,目前新版需要修改的文件是在NC/apps/onlyoffice/lib/Controller/EditorApiController.php
文件的第大概400行:
$editable = !$template
&& $file->isUpdateable()
&& !$isTempLock
&& (empty($shareToken) || ($share->getPermissions() & Constants::PERMISSION_UPDATE) === Constants::PERMISSION_UPDATE)
&& !$restrictedEditing;
$params["document"]["permissions"]["edit"] = $editable;
不需要懂PHP也能看出来,只需要在这两行之间加上一句$editable = false;
,就相当于覆盖了上一句的一大堆判断,直接指定所有情况下都是不可编辑模式。 经过测试,行为完全符合预期,所有文件打开都只有阅读模式了。
不过,直接修改源码的话,Nextcloud升级的时候可能会检测到文件被更改,为了避免变砖而拒绝升级。 如果遇到,手动再改过来就行了。