news 2026/9/15 12:28:19

Filestash 如何接入 Syncthing 后端以只读方式浏览同步文件夹

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Filestash 如何接入 Syncthing 后端以只读方式浏览同步文件夹

Filestash 如何接入 Syncthing 后端以只读方式浏览同步文件夹

【免费下载链接】filestash:file_folder: Universal File Storage Client项目地址: https://gitcode.com/GitHub_Trending/fi/filestash

Filestash 的存储后端列表里内置了一个 Syncthing 插件(server/plugin/plg_backend_syncthing/index.go)。它的用途不是"管理 Syncthing",而是把你的 Syncthing 同步文件夹以只读方式挂进 Filestash 的文件浏览器:根目录列出 Syncthing 的全部同步文件夹,文件夹内可以浏览、查看文件元信息并在线读取内容,但不能新建、上传、重命名、移动或删除。这篇文档说明如何完成这个接入,以及"纯 API 浏览"和"经本地同步目录读取文件"两种模式的区别。

接入前先确认什么

Syncthing 后端初始化时会立即调用一次 Syncthing REST API 拉取文件夹列表(见 index_helper.go 中的fetchFolders,请求/rest/config接口,并使用X-Api-Key请求头)。任何一步不满足,保存连接时就会直接报错,不会等到浏览时才发现:

  • Filestash 能访问到的 Syncthing 服务地址。后端表单的url留空时默认是http://localhost:8384(Syncthing REST API 的默认端口,即 README 中示例容器映射的 8384 端口)。
  • 一个可访问 REST API 的 Syncthing API key,填入表单的api_key字段。
  • Syncthing 实例中已存在至少一个同步文件夹(folder),否则 Filestash 根目录只会列出一个空列表。
  • 如果需要在线查看文件内容(下载、图片预览等),还需要 Filestash 进程能够以只读方式访问 Syncthing 的本地同步目录,通过sync_path字段指定该目录(详见下一节)。

插件自带 README 给出了一个可参考的测试实例(server/plugin/plg_backend_syncthing/README.md,其中的./syncthing/config./syncthing/sync是文档示例中的本地挂载路径):

docker run --name=syncthing-sync -d -e PUID=1000 -e PGID=1000 -p 8384:8384 -v ./syncthing/config:/var/syncthing -v ./syncthing/sync:/sync syncthing/syncthing

这条命令会启动一个容器并把 Syncthing 的 REST 端口 8384 暴露到宿主机。副作用是创建一个名为syncthing-sync的容器并在当前目录生成./syncthing数据目录;如果你已有自己的 Syncthing 实例,跳过这一步,直接把 API 地址指向现有实例即可。

在 Filestash 中配置 syncthing 存储后端

  1. 访问 Filestash 的管理端(/admin),进入存储后端(Storage Backend)设置页。该页面渲染可用后端列表与已启用后端的表单(前端逻辑见 ctrl_storage_component_backend.js),点击syncthing项即把它加入已启用后端。
  2. 在展开的表单中填写三个字段——这是 LoginForm() 定义的全部内容:
字段占位提示用途
urlAddressSyncthing REST API 地址,留空默认http://localhost:8384
api_keyAPI KeySyncthing API key,用于X-Api-Key请求头
sync_pathSync directorySyncthing 同步目录在 Filestash 所在主机上的路径,可留空
  1. 填写后保存配置。保存动作会触发后端Init(),此时 Filestash 立刻用上面的地址和 key 请求/rest/config;如果 API 返回非 200 状态,会以API returned status <code>的形式报错,此时应核对地址与 key,而不是先尝试浏览。

两种浏览模式的区别

sync_path是否为空,决定了文件内容从哪来:

  • 不填sync_path(纯 API 模式):目录列表通过 Syncthing 的/rest/db/browse接口(参数folderprefixlevels=1)从 Syncthing 数据库获取,因此文件夹结构、文件名、大小、修改时间都可以看到;但文件会被标记为 Offline,不能在线读取内容。适合只需要在 Filestash 里核对"同步了什么"的场景。
  • 填写sync_path(本地目录模式):列表仍然来自 Syncthing API,但Stat/Cat等操作改为把路径解析为sync_path+ 文件夹的path(来自/rest/config返回的folders[].path)+ 相对路径,直接以只读方式(os.O_RDONLY)打开本地文件(见 index.go 中的Stat/Cat)。此时文件可正常下载、预览。sync_path下找不到对应目录时会返回文件不存在之类的打开错误。

根目录(/)下只列出同步文件夹本身(每个文件夹显示为一个 directory),不显示sync_path下其他内容。

验证接入是否生效

按以下顺序核对,每一步都能直接落到文档或代码里的事实:

  1. API 连通:保存后端配置时没有报API returned status ...错误,说明urlapi_key已被 Syncthing 接受(/rest/config返回 200)。
  2. 根目录:进入 Filestash 的文件页(该后端对应的目录),应看到与 Syncthing 端配置一致的文件夹列表,名字取labellabel为空时回退为id
  3. 进入文件夹:列出的文件/子目录、大小与修改时间来自/rest/db/browse的结果;只识别FILE_INFO_TYPE_FILEFILE_INFO_TYPE_DIRECTORY两种类型,其他类型会记录错误日志plg_backend_syncthing::ls error=unknownItemType
  4. 只读行为:无论是否填sync_path,Filestash 根目录的元数据都被显式设置为不可建目录、不可建文件、不可重命名、不可移动、不可上传、不可删除(Meta() 中对path == "/"的分支)。在界面上看不到或执行不了写操作,即为预期结果,这不是配置遗漏。
  5. 内容读取:仅当填写了sync_path时,点开一个已知文件应能查看/下载;未填写时文件显示为 Offline 属预期行为。

限制与边界

  • 该后端不提供 Syncthing 管理功能。如果你想在 Filestash 域名下代理 Syncthing 自己的管理界面,那是另一个独立插件(server/plugin/plg_handler_syncthing/index.go),通过features.syncthing.enable/SYNCTHING_URL启用后把 Syncthing Web UI 反向代理到/admin/syncthing,与本文的存储后端接入互不依赖,按需启用即可。
  • 接入成功与否完全取决于 Syncthing REST 端点的可达性与 key 有效性;文档没有给出 Syncthing 侧需要额外开启的开关,若连接失败,按"地址 → key → 实例中是否已有 folder"的顺序核对即可。
  • 只读约束由该后端自身强制(元数据层面禁用全部写操作),不需要再叠加额外的授权插件。

【免费下载链接】filestash:file_folder: Universal File Storage Client项目地址: https://gitcode.com/GitHub_Trending/fi/filestash

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 12:27:08

2026年AI降噪工具在继续教育中的核心应用与选型指南

1. 为什么2026年继续教育必须关注AI降噪工具&#xff1f;在信息爆炸的时代&#xff0c;继续教育从业者正面临前所未有的知识过载挑战。根据LinkedIn 2025年度学习报告显示&#xff0c;73%的专业人士表示在线上学习时难以集中注意力&#xff0c;主要原因来自各类AI生成内容的干扰…

作者头像 李华
网站建设 2026/9/15 12:26:37

Pygame自制推箱子全解析:从地图数据结构到UI绘制

简介&#xff1a;这是一套基于Pygame自制UI的推箱子游戏源码包&#xff0c;包含三关完整逻辑与手绘风格界面&#xff0c;适合Python入门或游戏开发初学者学习Pygame核心机制。包内共二十个文件&#xff0c;核心为两个Python脚本&#xff0c;配合九个自定义界面图片、四个存放关…

作者头像 李华
网站建设 2026/9/15 12:24:30

甘肃网站建设开发app选对架构,一文搞懂避开90%的坑

甘肃网站建设开发app选对架构,一文搞懂避开90%的坑 别再用那些千篇一律的模板站了,客户看一眼就划走,转化率惨不忍睹。很多甘肃本地的企业主都在纠结,到底该怎么建一个既好看又实用的网站,还要能无缝对接App。今天咱们不整虚的,直接上干货,把【甘肃网站建设开发app】这事儿掰开了揉碎了讲清楚。…

作者头像 李华
网站建设 2026/9/15 12:24:03

JEB Pro 5.44实战:Android逆向工作流与DEX反编译全解析

我最早被 JEB Pro 圈粉&#xff0c;是在处理一批 Android 恶意样本的时候。当时手里同时开着 IDA Pro、Jadx 和一个在线反编译站&#xff0c;来回比对 DEX 字节码和 Java 层逻辑&#xff0c;折腾了一整天才勉强梳理出调用链。后来同事递过来一个 JEB Pro 的授权&#xff0c;我抱…

作者头像 李华
网站建设 2026/9/15 12:22:14

Shopify移动端从React Native回归Swift/Kotlin的技术决策解析

1. 这不是技术退步&#xff0c;而是商业逻辑的回归Shopify 从 React Native 回到 Swift/Kotlin——看到这个标题&#xff0c;很多刚入行的开发者第一反应是&#xff1a;“啊&#xff1f;又推倒重来&#xff1f;React Native 不是跨端银弹吗&#xff1f;”但如果你在电商 App 开…

作者头像 李华