关于 NextCloud 20 生成缩略图的折腾

NextCloud 各方面都用着很不错,唯一让我觉得非常不爽的是:如果进入一个图片很多的目录,那个缩略图加载实在太慢!如果随便点击打开一张照片,一直都在加载转圈圈!等了许久才能加载出完整照片。如果此时继续往下浏览更多的照片,我相信你绝对没有更多的时间与耐心去等待缩略图加载,更别说点击查看了!

这个问题肯定得解决,不然总觉得不够完美。实际上没有完美的东西,只是在有条件的情况下尽量的去完善而已。

实际上 NextCloud 的官方都是推荐使用 Prewiews Generator 这个插件来实现自动生成缩略图。可是配置与使用此插件的细节少之又少,分分钟让人掉进坑里,其中我就被坑了。

掉坑里去了

安装了 Prewiews Generator 这个插件之后,就按照插件官方简单的说明,执行首次全盘扫描生成缩略图:

sudo -u apache php occ preview:generate-all -vvv 

缩略图成功的生成了,我存储的照片大概有 29GB,貌似耗时半天左右才完成所有的缩略图生成。于是简单的测试了进入各个照片数量很多的目录,显然浏览速度确实有了非常大的提升,比之前爽太多了。

然后安心的把计划任务添加上让其自动为之后的新照片自动生成缩略图:

crontab -u apache -e
15 3 * * * php -f /var/www/html/nextcloud/occ preview:pre-generate

可是今天去检查缩略图存放的目录发现有点不对呀,缩略图存放目录居然占用 30GB 多!比所有的原图照片占用的空间还要多,这不太科学了吧?在详细浏览各种缩略图所在的目录发现,生成许多实际上可能不需要的分辨率的缩略图,一张图片,缩略图能有10种不同分辨率!最大尺寸4096×4096,占用空间已经与原图大小相当,还有2K、1K等诸多各种分辨率的缩略图,如果我的存储空间是无限的话,问题不大,可是又有谁能有无限的存储空间?

就目前生成的缩略图占用比原图还大的情况,我需要将其清除,然后重新生成符合实际效率,且有用的缩略图。于是在 NextCloud 官方论坛找相关资料,关于如何清除之前已生成各种尺寸的缩略图。令人头疼的是官方论坛经常无法访问,找资料实在太难了!

再次掉坑里了

cd /var/www/html/nextcloud
sudo -u apache php occ preview:delete_old

没有任何作用,啥也没有删掉。

来之不易的资料:

这是搜索官方论坛并结合回复关于此问题的链接总结的方法:

1、停止 Apache

systemctl stop httpd

2、把原略图目录移动到其他目录(如你觉得绝对成功的,可以把目录删除)

mv /var/www/html/nextcloud/data/appdata_ocfv****f/preview /var/www/html/nextcloud-old/

3、cd 到 nextcloud 目录,执行扫描修复数据库

sudo -u apache php occ files:scan-app-data

4、设置缩略图参数。(根据自己需要设置)

sudo -u apache php occ config:app:set previewgenerator squareSizes --value="64 256 1024"
sudo -u apache php occ config:app:set previewgenerator widthSizes  --value="64 256"
sudo -u apache php occ config:app:set previewgenerator heightSizes --value="64 256"
sudo -u apache php occ config:system:set preview_max_x --value 2000
sudo -u apache php occ config:system:set preview_max_y --value 2000
sudo -u apache php occ config:app:set preview jpeg_quality --value="60"

5、启动 Apache ,清除浏览器缓存,浏览器登录 NextCloud 。并随便浏览照片目录与其他目录几分钟。目的让系统自动生成缩略图 preview 目录。

6、WinSCP 登录后台查看 preview 此目录出现后,执行全盘扫描生成缩略图:

sudo -u apache php occ preview:generate-all -vvv

此刻又是一个漫长的等待,于是就把这个过程给记录下来吧。

检查我们的设置之后,所生成的缩略图

nextcloud previews 01

缩略图完全按照设置生成,证明已经踏上了成功的路上了!😁

就这样,明天等所有的缩略图都完成之后,再确认体验效果吧。

所有缩略图已经生成完毕,浏览非常流畅了。关于缩略图的分辨率问题,我觉得 NextCloud 没有明确的默认尺寸,好像是针对不同设备,不同分辨率的显示器,或使用4K分辨率的不同缩放,可能定义的缩略图分辨率都不同。具体就不再去纠结这个问题了,只需设置符合自己常用设备的缩略图分辨率即可。

我最终修改为如下几个尺寸的缩略图:

nextcloud previews 02

定义需要生成缩略图的文件格式: (配置在 config.php )

  'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\PNG',
    1 => 'OC\\Preview\\JPEG',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\HEIC',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\Movie',
    7 => 'OC\\Preview\\MKV',
    8 => 'OC\\Preview\\MP4',
    9 => 'OC\\Preview\\AVI',
  ),

txt、MarkDown、mp3 这几个文件类型个人认为没必要生成缩略图,实际上mp3如果有专辑封面图作为缩略图,效果还是非常好的。可是我的mp3文件许多都没有这些专辑封面元素数据,所以干脆不显示缩略图。

某种文件格式如果生成缩略图,比如txt格式文件。如果存储了非常多txt文件,会生成许多缩略图,而这些数据都记录在数据库导致数据库庞大。而且txt文件许多都是 Windows(CR LF) 这种中文文字,缩略图是一片乱码,没有任何意义。

发表评论