synk是一个基于lorca,gin,react构建的一个局域网互传文件应用
在你的隔空投送因为莫名原因不好用的时候,又不想借助qq/微信等聊天软件,那么不如自己实现一个隔空投送
主页
选择电脑的ip
选择一张图片
使用手机扫码
在手机上下载这张图片
- 将本项目克隆到本地
git clone https://github.com/Octane0411/synk.git
或
git clone [email protected]:Octane0411/synk.git
- 自行编译
cd synk
CGO_ENABLED=0 GOOS=「windows/darwin/linux」 GOARCH=「amd64/arm64」 go build main.go
cd server/frontend
yarn
yarn build
cd -
- 运行
./synk
为什么不用electron? 因为我不会
我了解到 Go 的如下库可以实现窗口:
- lorca - 调用系统现有的 Chromium 实现简单的窗口,UI 通过前端技术实现
- webview - 比 lorca 功能更强,实现 UI 的思路差不多
- fyne - 使用 Canvas 绘制的 UI 框架,性能不错
- qt - 更复杂更强大的 UI 框架
只有lorca没什么学习成本,故使用lorca
我用 React + ReactRouter 来实现页面结构,文件上传和对话框是使用原生 JS 写的,没有依赖其他 UI 组件库。
lorca 的主要功能就是展示我写出来的 index.html。
index.html 中的 JS 用到了五个接口,我使用 gin 来实现:
router.GET("/uploads/:path", controllers.UploadsController)
router.GET("/api/v1/addresses", controllers.AddressesController)
router.GET("/api/v1/qrcodes", controllers.QrcodesController)
router.POST("/api/v1/files", controllers.FilesController)
router.POST("/api/v1/texts", controllers.TextsController)
其中的二维码生成用到了 go-qrcode。
用 gorilla/websocket 实现手机通知 PC
这个库提供了几个example,看完几个example就大概明白该怎么做了
总得来说:
- 用 Lorca 搞出一个窗口
- 用 HTML 制作界面,用 JS 调用后台接口
- 用 Gin 实现后台接口
- 上传的文件都放到 uploads 文件夹中,为文件生成uuid以区分