Skip to content

wgnfg/BPFTP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BPFTP

一个基于现代.NET,Avalonia,Renci.SSH的易于定制的SFTP跨平台客户端

特点

  • 纯C#.NET项目,代码完全透明,只有Renci.SSH相关Sftp相关操作会访问网络.
  • 不卡,非常异步(哪卡了就提Issue)
  • 非常跨平台,Avalonia本身支持的平台应该都可以跨.目前仅开放Windows和安卓2个比较有代表性的.后面慢慢补
  • 支持密码SSH2种Sftp验证方式.密码/passphrase存储使用各个平台自身的机制产生专用的key进行加密解密存储.当然,也可以自己改.
  • UI不用被训狗/被瞎指挥/吃大锅饭,想要什么完全可以自己修改axaml定制
  • 自己想要一些自用功能在手机上使用但没有一个砖厂,完全可以在这里自己加按钮然后直接C#代码实现(工作里不能这么干,但这里完全可以自由放开写)

Usage(先不放图了)

基本使用
  • 最上方的连接管理CRUD
    • 按钮很直白了,添加连接时点增,下拉选中后可以连,删,改.
  • SFTP连接,远端及本地的文件浏览及上传下载
    • 包含右键(安卓平台为长按)菜单的上传下载,双击进入文件夹
    • 单个拖动到对面区域进行上传/下载,从其他地方拖动到sftp区域批量上传
    • 传输进度显示及取消按钮
各个平台上的使用
  • Windows
    • 在VS中启动项目选.Desktop,点Run
    • 需要打包发布的场合,可以对.Desktop项目右键发布,然后根据自己需要点点点.
  • Android
    • 保证手机打开开发者模式,如果没玩过这些,可以直接问问AI如何打开开发者模式和支持USB调试
    • 把手机插上数据线连电脑上,开启USB调试,选文件传输模式(不想连实机的场合可以用模拟器,比如逍遥)
    • 在VS中启动项目选.Android,设备选你的设备.然后点Run
      • 如果没有看到你的设备,一般是没选文件传输模式或者手机上在让你确认什么东西
      • VS偶尔会抽风,设备这里只有个Android Emulator,没啥太好解决办法.可能抽完风就好了.2026这种抽风频率比2022低了
    • 坐和放宽,如果过了一会你的手机上此项目成功运行了,说明你做对了.后面再想启动,就直接像其他app一样点图标启动.
    • 第一次启动时直接允许访问全体文件和网络权限即可
  • Mac
    • TODO
  • Linux
    • TODO

部分设计思路/已知问题/饼

  • 目前界面部分是单页内部多层Content堆叠方式,直接一套梭哈全平台.
    • 项目关注点不在UI设计上,更多的是关注机制及功能.纯axaml画界面这些事情大家可以按照自己喜好去给自己定制,或者用控件库替换.
    • 安卓平台的UI交互没做任何特殊处理,体验只能说是能用.(这应该也比较符合Avalonia具有一致的外观和行为的宣传语)后面有时间会针对移动端操作进行单独适配,以及单独做画面.
    • 如果各位想以此项目为砖场,比划比划怎么用Avalonia在移动端上做出更像人的交互(比如给安卓平台单独重新axaml,Popup/Dialog等相关机制替换为使用安卓原生等),可以参考后面自己改代码的一些建议一节.
  • 安卓等移动端可能额外需要后台传输等机制,否则会被杀,然后就似了.后面有时间会补充.目前轻度传个小文件前台使用问题不大.
  • 目前完全没有使用的是流量WIFI等检查,也没写限速等机制,因此尽量在Wifi环境下使用
  • C#与安卓的操作部分使用Mono.Android,不hybird MaUI.
    • 对于Mono.Android,我想正常情况大家应该都是完全不会写.但这个年代完全可以先AI代打然后自己再手动改改错确实可以比较完美地实现.NET与原生安卓的交互(但干这事还是很花时间的,并且跟在桌面上开发调试的体验相比就纯在赤石.赤完了也没钱拿.不是闲的没事干不建议干这种跟AI一起坐牢用C#写一堆Java命名空间的东西在安卓上一直炸然后对自己0提升这种抽象事.(不过对.NET玩家来说可能体验还比用AndroidStudio写原生好点?)hybird MaUI会有更多额外限制还得到处传MaUI的Activity,更赤石,还不如直接看谷歌的安卓文档学学正统安卓的设计)
    • 如果想单独探索一下用Mono.Android怎么玩,以及可以玩出什么东西,可以参考隔壁项目ItsMyHu.NET,上面会堆一些直接拿想要的权限之后用Mono.Android狂调安卓API能做到的玩法.也可以自己开个Avalonia跨平台项目让AI不用Maui直接用Mono.Android帮你写.
  • 可能弄些自定义pipeline,比如上传前自动压缩加密,下载后自动解密解压这样?
  • 图标是让AI乱画的,后面应该会换
  • 项目目前开发时间较短,不想赤石可以养肥再体验.但不抱着当测试的心态轻度使用应该没啥问题.

自己改代码的一些建议

  • 希望完全定制主画面的场合
    • 推荐继承SftpWorkspaceViewModel,随后创建名称匹配(指可以被ViewLocator找到)的axaml,随后在各个平台的ConfigureServices中注册使用的VM.这样这个平台使用的界面就是你的axaml了.例如目前项目的安卓平台这样注册:
      services.AddSingleton<SftpWorkspaceViewModel, SftpWorkspaceForAndroidViewModel>();
    于是在安卓平台上被ViewLocator定位到的View的名字也就是SftpWorkspaceForAndroid. 目前的SftpWorkspaceForAndroid是一个仅继承SftpWorkspace而无其他内容的类,仅用于偷SftpWorkspace的axaml并且占位. 如果认为自己的画面做的比较有意义,可以提PR加入项目中,项目会支持各个版本的axaml共存,用户可以自己在依赖注入中自己选择各个平台使用的VM来决定使用的View.上面这些也正是MVVM的意义之一.
  • 其他UI交互定制
    • 对于IViewService中的Popup/Dialog等处理,可以自己实现相关Service,并依赖注入指定.内部实现成用Mono.Android直接new安卓原生的这些,或者转发给控件库都可以.

其他说明

  • 只是个Sftp客户端,服务器或者其他可以作为Sftp服务端的东西还是自己弄.不会提供这些.
  • 如果是希望局域网互传文件,或简单本机硬盘内部TP测试,没有sftp服务端,可以在docker-desktop里创建个容器挂载个本地目录并开放端口,随后局域网内部连接,然后添加连接信息(名字为foo,密码为pass,端口为2222)即可连接开始使用:
 docker run -d --name sftp-server   -p 2222:22  -v <你的本地路径>:/home/foo/upload   atmoz/sftp   foo:pass:1001

About

一个基于现代.NET和Avalonia的易于定制的SFTP跨平台客户端

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published