[AI Development Lab] 【deepin插件开发活动】+ DShare基于DTK的文件共享软件
Tofloor
poster avatar
看时光飞逝
deepin
7 hours ago
Author

源码链接:https://github.com/zhutianhao/dshare

DShare

DShare 是一款基于 DTK(Deepin Tool Kit) 专为 deepin 桌面环境 打造的文件共享软件。它把本机的一个目录(~/myshare)通过局域网共享出去: 既提供原生 DTK 图形界面在本地管理文件,也内置一个 HTTP/HTTPS 服务,让同局域网 内的其他设备通过浏览器或本程序直接浏览、下载、上传文件。

采用 DTK6 开发,深度集成 deepin 的视觉风格与桌面组件(窗口、控件、主题、 提示框、日志等),是 deepin / UOS v25 桌面下体验一致的文件共享工具。

English version is available at the bottom of this file.


功能特性

[](https://github.com/zhutianhao/dshare#%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7)

  • 本地文件管理:基于 DTK 的图形界面,浏览共享目录 ~/myshare,支持 新建文件夹、复制/粘贴、拖拽移动/复制、删除、双击打开。
  • Web 文件共享:程序启动时自动在 5000 端口 开启 HTTP/HTTPS 服务。 其他设备用浏览器打开 https://<你的IP>:5000 即可:
    • 浏览目录(带路径导航、文件大小展示)
    • 下载单个文件
    • 通过网页表单上传文件、新建文件夹
    • 优先使用 HTTPS(自动用 openssl 生成自签名证书并写入本机 LAN IP 到 SAN,减少浏览器告警);证书不可用时回退到明文 HTTP 并给出提示。
  • 局域网设备发现:基于多播(UDP 端口 5001 / 组播组 239.255.42.99)自动 发现同局域网内其它运行本程序的 deepin 机器。可按机器名正则发起查找,避免 手动记 IP。
  • 远程目录浏览与传输:在地址栏「机器」下拉中选择另一台设备即可只读浏览其 共享目录:
    • 双击文件 → 下载到本机缓存并默认打开
    • 把远程文件拖到本地视图/系统文件管理器 → 下载
    • 把本地文件拖入远程视图 → 上传到对方共享目录
  • 访问授权(可选):顶部「访问需授权」开关开启后,任何设备访问你的共享都 需经你手动批准。授权请求会弹出提示框显示对方机器名与 IP;浏览器端通过 自动握手 + Cookie 完成授权,桌面客户端通过 AuthManager 自动完成握手,无需 用户记忆任何口令。

编译依赖

[](https://github.com/zhutianhao/dshare#%E7%BC%96%E8%AF%91%E4%BE%9D%E8%B5%96)

依赖 说明
CMake >= 3.13 构建系统
Qt6 Core / Widgets / Network / HttpServer 应用框架与 HTTP 服务
DTK6 Core / Gui / Widget / Log deepin 桌面组件与日志(本程序基于此构建)
openssl 生成自签名证书(运行期使用其命令行)
C++17 编译器(g++ / clang)

适用于 deepin / UOS v25(DTK6)环境。


编译与安装

[](https://github.com/zhutianhao/dshare#%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85)

# 在项目根目录
mkdir -p build && cd build
cmake ..
make -j"$(nproc)"

# 运行(未安装时可直接执行构建产物)
./dshare

# 可选:安装到系统
sudo make install      # 可执行文件 -> /usr/bin,桌面项 -> /usr/share/applications

安装后也可从应用菜单启动(桌面项名称为「DShare」)。


使用方法

[](https://github.com/zhutianhao/dshare#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95)

1. 本地管理共享目录

[](https://github.com/zhutianhao/dshare#1-%E6%9C%AC%E5%9C%B0%E7%AE%A1%E7%90%86%E5%85%B1%E4%BA%AB%E7%9B%AE%E5%BD%95)

启动后默认进入本机 ~/myshare(不存在会自动创建)。通过工具栏即可:

  • 返回上级 / 新建文件夹 / 刷新 / 复制 / 粘贴
  • 右键菜单:新建文件夹、刷新、复制、粘贴、删除、打开
  • 选中文件后在本窗口内拖拽 = 移动,从外部(如系统文件管理器)拖入 = 复制

2. 通过浏览器共享 / 访问

[](https://github.com/zhutianhao/dshare#2-%E9%80%9A%E8%BF%87%E6%B5%8F%E8%A7%88%E5%99%A8%E5%85%B1%E4%BA%AB--%E8%AE%BF%E9%97%AE)

  • 本机访问:浏览器打开 https://localhost:5000
  • 局域网访问:窗口底部状态栏会显示 局域网:https://<你的IP>:5000, 把该地址发给同局域网的其他人即可。
  • 在网页中可浏览目录、点击文件下载、使用表单上传文件或新建文件夹。
  • 浏览器会提示自签名证书不受信任,选择「继续访问」即可(证书仅用于加密, 不提供第三方信任链)。

3. 发现并连接其它设备

[](https://github.com/zhutianhao/dshare#3-%E5%8F%91%E7%8E%B0%E5%B9%B6%E8%BF%9E%E6%8E%A5%E5%85%B6%E5%AE%83%E8%AE%BE%E5%A4%87)

  1. 点击工具栏 添加,弹出「查找」对话框。
  2. 输入目标机器名(作为正则表达式,留空/.* 匹配全部),点击「查找」。
  3. 程序持续发送多播查询,下方列表会显示应答的机器(已去重)。
  4. 双击列表中的机器,即把它加入地址栏「机器」下拉框并切换过去。

4. 与远程设备互传文件

[](https://github.com/zhutianhao/dshare#4-%E4%B8%8E%E8%BF%9C%E7%A8%8B%E8%AE%BE%E5%A4%87%E4%BA%92%E4%BC%A0%E6%96%87%E4%BB%B6)

在「机器」下拉框选择某台远程设备后:

  • 下载:双击文件(下载并打开)/ 把文件拖到本地视图或桌面。
  • 上传:把本地文件拖入远程视图的目录中。
  • 远程目录为只读,不支持在其中新建/删除/粘贴。

5. 开启访问授权

[](https://github.com/zhutianhao/dshare#5-%E5%BC%80%E5%90%AF%E8%AE%BF%E9%97%AE%E6%8E%88%E6%9D%83)

打开顶部的「访问需授权」开关:

  • 之后任何未授权设备访问你的共享,你都会收到弹窗,显示请求方的 机器名与 IP,可选择「允许」或「拒绝」。
  • 超时(5 分钟)未处理视为拒绝;关闭开关会清空所有在途/已批准授权。
  • 对浏览器与桌面客户端均生效,授权过程对终端用户透明。

协议 / 端口一览

[](https://github.com/zhutianhao/dshare#%E5%8D%8F%E8%AE%AE--%E7%AB%AF%E5%8F%A3%E4%B8%80%E8%A7%88)

用途 协议 端口 说明
Web 文件服务 HTTPS(回退 HTTP) 5000 浏览 / 下载 / 上传 / 授权接口
局域网发现 UDP 多播 5001 组播组 239.255.42.99

目录结构

[](https://github.com/zhutianhao/dshare#%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84)

dshare/
├── main.cpp              # 程序入口,初始化 DApplication(DTK)
├── mainwindow.{h,cpp}    # 主窗口:本地浏览、拖拽、跨机传输、授权弹窗
├── fileserver.{h,cpp}    # 内嵌 HTTP/HTTPS 服务(浏览/下载/上传/授权)
├── discovery.{h,cpp}     # 局域网多播设备发现
├── remotemodel.{h,cpp}   # 远程共享目录只读模型(拖拽支持)
├── finddialog.{h,cpp}    # 「查找设备」对话框
├── authmanager.{h,cpp}   # 客户端侧授权握手管理
├── updirproxy.h          # 本地目录的「返回上一级」代理模型
├── dshare.desktop        # 桌面启动项
├── translations/         # 中文本地化(zh_CN)
└── CMakeLists.txt        # 构建配置

License

[](https://github.com/zhutianhao/dshare#license)

本程序以 GNU General Public License v3 (GPL-3.0) 发布,详见仓库根目录的 LICENSE 文件。

程序截图:

桌面端主界面:

image.png

当打开授权开关时,需要共享端同意才能访问(默认关闭,不需要授权):

image.png

手机端不需要安装任何软件,直接使用浏览器即可上传、下载文件:

文件共享 -.png

客户端之间直接就能互相浏览共享文件(如果开启了需授权开关,也是需要对方同意才能访问):

image.png

开发过程说明:

软件完全使用codebuddy+dtk-development skill用自然语言对话开发,没有一点手工编辑代码,以下是完整对话记录:

session.txt

Reply Favorite View the author
All Replies

No replies yet