# fsync **Repository Path**: wanneme/fsync ## Basic Information - **Project Name**: fsync - **Description**: 个人小型文件同步工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: fsync - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-21 - **Last Updated**: 2025-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 简单的个人PC端文件同步方案(暂不支持同步删除)。 适用范围:个人,局域网,低频率同步。 ## Start Up ### 环境 `jdk17` ### 启动 ``` java -jar jsyncfile-xxx.jar ``` ### 访问 `http://localhost:8052/jsync/home` 1. 先点击 Clients 右边的加号,添加本机为客户端。名称-localhost,协议-http,IP或域名-localhost,端口-8052。 2. 点击 Groups 右边加号,添加需要备份和同步的路径。 名称-自定义,源路径-需要备份的路径, 目标client-用于备份的client的主机(这里选取刚刚添加的本机), 目标路径,备份主机上用于保存的备份的路径。同步参数见后面 `同步参数说明` 3. 点击刚刚新添加的 Group,点击中间向右的箭头,可以手动立即进行同步(弹窗的配置仅适用于本次同步,和下面的Task无关)。 4. 点击添加 Tasks 右边加号, `cron表达式` 为定时同步任务触发规则(注意:规则必须合法)。 5. 点检刚刚的 Task,点击 “编辑Groups”,添加 Groups,最后保存。 Client - 备份保存的主机(可以是本机, server 与 client同机) Group - 一对一的源路径和备份路径 Task - 备份定时任务 目前缺点应该是无法取消正在进行的同步。 ### 同步参数说明 ![结构图](docs/sync-config.jpg) | 仅存在于Client上的文件 | 文件重名 | | |:--------------:|:----:|:-----------------------------------------------:| | 删除 | 覆盖 | client 完全同步 server | | 删除 | 保留 | (无意义) client 的文件更新,则重命名 client 上的文件,但下次更新会删除此文件 | | 不处理 | 覆盖 | (推荐) 不处理 client 上多余的文件,server 会完全同步到 client | | 不处理 | 保留 | 不处理 client 上多余的文件,文件更新时会保留旧文件 | ## Intro 每个程序以 `server` 和 `client` 混合运行,文件从 `server` 同步到 `client` 中。 从 `sever` 中选择需要备份的文件夹, 从 `client` 中选择路径作为备份根路径,组合成 `GroupMap`。 选择 `GroupMap` 添加到定时任务 `Task` 中。 ![结构图](docs/jfsync.jpg) ## 配置 配置文件: `config/application-user.yml` ### 最大文件限制 ``` servlet : multipart: max-file-size: 10240MB # 单个文件上传大小 (10G) max-request-size: 10240MB # 总请求大小 (10G) ``` ### server 与 client 交互凭证 server 向 client 同步文件时,附带此请求头 ``` jsyncfile: client: # 与 client 交互需要用到的请求头 (http-header 和 http-value需要同时设置) http-header: jsftoken # 与 client 交互需要用到的请求头的值 http-value: 'this-is-header-value' ``` ### 指定 server 地址 ``` csrf-cors: # 是否启用跨域检查 enable-origins: true # 是否启用盗链检查 enable-refers: true # 当请求头中没有 referer 时是否放开(例:浏览器中直接发送get请求),下面 refers 为空时不生效 allow-empty-referer: false # 允许通配符 *, 逗号隔开 origins: - 'http://localhost:[*]' - 'https://localhost:[8042]' refers: - 'http://localhost:[*]' - 'https://localhost:[8042]' ``` ## Preview ![index](docs/index.jpg) ![group](docs/group.jpg) ![task](docs/task.jpg) ## Build 此仓库为后端,[前端](https://gitee.com/wanneme/fsync-web.git)需要单独下载。 现在有两个项目 `fsync` - 后端 `fsync-web` - 前端. ### fsync-web ``` npm install npm run build ``` ### fsync 把上面生成的前端 `dist` 放到后端资源路径下: `fsync-web\dist` ==> `jsyncfile\src\main\resources\static\` ``` mvn clean build ``` ## todo 启动脚本