Skip to content

Shabi-x/go-file-sync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go File Sync

一个基于Go+Gin实现的简单易用的跨设备文件传输工具,让您可以在手机和电脑之间轻松分享文件和文本内容。

工作原理

本工具在您的电脑上启动一个本地服务器,并获取电脑在局域网中的IP地址。通过生成包含此IP地址的二维码,您的手机可以扫描并直接访问电脑上的文件传输界面。请注意:手机和电脑必须连接在同一个局域网(WiFi)下才能正常使用。

实现思路

技术选型

项目采用了简洁高效的技术栈:

  • 前端界面: 使用Lorca库创建窗口,通过React实现用户界面
  • 后端服务: 使用Gin框架提供RESTful API接口
  • 实时通信: 使用Gorilla WebSocket实现设备间的实时通知
  • 二维码生成: 使用go-qrcode库生成二维码图片

架构设计

项目采用前后端分离的架构:

  1. 桌面应用: 通过Lorca创建一个轻量级窗口,加载本地HTML页面
  2. Web服务: Gin框架提供文件上传、下载、二维码生成等API接口
  3. 实时通信: WebSocket连接实现手机与电脑之间的实时消息推送

如何使用

支持的文件类型

  • 文本文件
  • 图片文件(.jpg, .png, .gif等)
  • 其他常见文件格式

文件传输方法

从手机发送文件到电脑

  1. 扫描二维码连接到电脑
  2. 点击"上传文件"按钮
  3. 选择您要发送的文件
  4. 点击确认上传
  5. 文件将保存在电脑的指定文件夹中

从电脑发送文件到手机

  1. 在电脑程序界面上选择要分享的文件
  2. 生成包含文件信息的二维码
  3. 用手机扫描该二维码
  4. 在手机上即可查看或下载文件

发送文本内容

  1. 扫描二维码连接到电脑
  2. 在文本框中输入您要发送的内容
  3. 点击发送按钮
  4. 文本内容将自动保存为文件在电脑上

项目结构

go-file-sync/
├── controller/          # 控制器包
│   ├── address_controller.go    # IP地址获取控制器
│   ├── file_controller.go       # 文件下载控制器
│   ├── files_controller.go      # 文件上传控制器
│   ├── qrcode_controller.go     # 二维码生成控制器
│   └── text_controller.go       # 文本上传控制器
├── frontend/           # 前端资源
│   └── dist/
├── main.go             # 主程序入口
├── go.mod              # Go模块定义
└── go.sum              # 依赖版本锁定

接口进度

1. 文本上传接口

  • 接口地址: POST /api/v1/texts

  • 功能描述: 接收前端传递的文本内容并保存为文件

  • 请求参数:

    {
      "raw": "要上传的文本内容"
    }
  • 返回结果:

    {
      "filename": "生成的文件名.txt"
    }
  • 状态: ✅ 已完成

2. IP地址获取接口

  • 接口地址: GET /api/v1/addresses

  • 功能描述: 获取本机非回环IPv4地址列表

  • 请求参数: 无

  • 返回结果:

    {
      "addresses": ["192.168.1.100", "10.0.0.2"]
    }
  • 状态: ✅ 已完成

3. 文件下载接口

  • 接口地址: GET /uploads/:path
  • 功能描述: 下载指定路径的文件
  • 请求参数:
    • path (路径参数): 文件相对路径
  • 返回结果: 文件内容
  • 状态: ✅ 已完成

4. 二维码生成接口

  • 接口地址: GET /api/v1/qrcodes
  • 功能描述: 根据内容生成二维码图片
  • 请求参数:
    • content (查询参数): 要编码为二维码的内容
  • 返回结果: PNG格式的二维码图片
  • 状态: ✅ 已完成

5. 文件上传接口

  • 接口地址: POST /api/v1/files

  • 功能描述: 上传文件到服务器

  • 请求参数:

    • raw (表单数据): 要上传的文件
  • 返回结果:

    {
      "url": "/uploads/生成的文件名"
    }
  • 状态: ✅ 已完成

6. WebSocket接口

  • 接口地址: WS /ws
  • 功能描述: 实现实时通信功能,用于文件同步通知
  • 状态: ✅ 已完成

运行项目

需要准备

  • 电脑已安装Go语言环境(版本1.20或更高)
  • 电脑和手机必须连接在同一个局域网(WiFi)下
    • 可以是同一个WiFi网络
    • 或者电脑通过网线连接、手机连接WiFi但两者在同一个路由器下
    • 或者一方连接另一方开启的个人热点

安装步骤

  1. 打开电脑终端,进入项目文件夹

  2. 运行以下命令安装所需组件:

    go mod tidy

启动方法

  1. 在电脑终端中运行以下命令启动程序:

    go run main.go
  2. 程序会自动在基于lorca打开一个webView,并显示电脑的局域网IP地址

  3. 确保手机已连接到同一个局域网

  4. 用手机扫描电脑界面上的二维码,即可开始使用

开发收获

通过这个项目的开发,我深入学习了Go语言的多个重要概念:

  1. 并发编程: 理解了Go的并发模型,特别是发布订阅模式的实现
  2. 通道操作: 掌握了通道的正确使用方法,避免了常见的通道操作错误
  3. 模块管理: 学会了Go应用中引入本地包的正确方法
  4. Web开发: 实践了使用Gin框架构建RESTful API的过程
  5. 网络编程: 通过WebSocket实现了实时通信功能

About

基于Go+Gin实现的PC端与移动端互传文件的服务模块

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published