Nextcloud 文件夹打包 ZIP 下载完整指南:共享链接一键下载与空间清理技巧
2026/9/21 2:54:44 网站建设 项目流程

Nextcloud 文件夹打包 ZIP 下载完整指南:共享链接一键下载与空间清理技巧

【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server

Nextcloud 把文件夹打包成 ZIP 的下载能力,平时藏在两处入口:共享链接页的"下载"按钮,以及 Files 界面的多选下载。本文按"先上手、再看原理、最后做清理"的顺序讲清楚:下载怎么触发、服务器端apps/files_sharing的共享控制器如何重定向到 DAV 端点完成压缩、以及怎么释放打包过程留下的空间。

把文件夹打包成 ZIP 的两条下载路径

推荐路径:通过共享链接下载

适合把整个文件夹一次性交给别人的场景。

  1. 打开 Nextcloud 网页版,在目标文件夹上点击右侧"更多"(三个点),选择"共享"。
  2. 创建或复用一个公共链接,把链接发给对方。
  3. 对方打开链接进入共享页,点击"下载"按钮。
  4. 浏览器开始下载 ZIP 文件,解压后就是完整的目录结构。

整个过程对方不需要注册账号,也不需要 WebDAV 客户端。

替代路径:在 Files 里多选下载

只下载部分内容时更快:

  1. 登录 Nextcloud,进入目标文件夹。
  2. 按住 Ctrl(Windows/Linux)或 Command(Mac)逐个点选文件,或全选子项。
  3. 点击顶部工具栏的"下载",选中的多个文件会被自动打包成一个 ZIP。

两条路径最终走的是同一套服务端逻辑,差别只在入口:共享链接面向外部访问者,多选下载面向你自己的账号会话。

它是怎么实现的:共享控制器重定向到 DAV 端点

核心实现在文件共享模块的ShareController里。downloadShare方法收到请求后,先校验共享的读取权限和下载属性,确认无误后并不自己打包,而是拼出一个 DAV 地址并返回 302 跳转,让后续的 DAV 服务负责压缩:

$davUrl = '/public.php/dav/files/' . $token . '/?accept=zip'; if ($files !== null) { $davUrl .= '&files=' . $files; } return new RedirectResponse($this->urlGenerator->getAbsoluteURL($davUrl));

这里accept=zip是关键参数,告诉 DAV 端点"把这个节点压缩成 ZIP 流式返回";files参数则支持只下载文件夹里的部分文件。这个设计的好处是:压缩是按需产生的,ZIP 不会作为成品长期躺在磁盘上,服务器内存和磁盘压力都可控。

该接口在 31.0.0 之后被标记为 deprecated,官方建议直接用 DAV 端点完成下载——也就是把"控制器重定向"这一步自己做了,效果完全一样。

源码位置:apps/files_sharing/lib/Controller/ShareController.php

空间优化:清理临时压缩文件、设置版本保留策略

定期清理临时压缩文件

压缩过程中可能产生临时文件和中间产物,集中在临时目录。Nextcloud 的后台任务会周期性清理这类残留,管理员也可以手动检查data/tmp和系统/tmp下的oc_tmp*文件,超过 24 小时没被访问的直接删除。预期效果:长期跑下载的服务器,每周能释放数百 MB 到数 GB 不等的零碎空间。相关逻辑参考 core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php。

合理设置版本保留策略

文件版本控制会保留每次修改的历史副本。一份 50 MB 的文档被反复编辑 20 次,最坏情况要多占约 1 GB。在管理员设置的"文件版本控制"里把保留时长调到 30~90 天、旧版本只留每日一份,通常能把版本占用压回总文件量的 5% 以内。配置入口在 apps/files_versions/。

大文件走 WebDAV 客户端直接拉取

大于 1 GB 的单文件没必要走 ZIP,用 rclone 或 WebDAV 客户端直连下载,跳过打包环节,省下的不只是时间,还有临时空间的峰值占用。

注意事项

  1. 大型文件夹(10 GB 以上)的 ZIP 下载在 PHP-FPM 下容易触发超时,建议分批下载或改用 WebDAV 客户端。
  2. downloadShare接口已标记废弃,新项目请直接调用 DAV 端点。
  3. 共享链接的hideDownload属性开启后,下载 API 不可用,需要预览或下载时改用 DAV。
  4. 临时压缩文件由后台任务定期清理,不需要为它单独写 cron,但磁盘监控别漏。

延伸阅读:文件共享模块、文件版本控制、后台清理任务

【免费下载链接】server☁️ Nextcloud server, a safe home for all your data项目地址: https://gitcode.com/GitHub_Trending/se/server

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询