Skip to content

pewee-live/ugos_pro_api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UGOS Pro Java Client (绿联 NAS Java API 客户端)

这是一个用于与绿联(UGREEN)NAS UGOS Pro 系统进行交互的非官方 Java 客户端。主要目标用户是开发人员,适合用于开发自建轻量级的OSS服务;

本项目通过逆向分析绿联UGOS PRO Web 前端 API,实现了对 NAS 的基本操作,包括安全登录、文件列表和文件上传、下载和删除。

项目以SDK的方式发布,依赖简单干净,适合与任何自己的项目做集成,如spring环境下仅需将必要的类给spring托管即可;

✨ 主要功能

  • 🔐 安全登录: 实现了与官方 Web 端一致的 RSA 加密登录流程,确保密码安全。
  • 🔄 会话管理: 能够获取并刷新会话凭证 (Cookie, Tokens),维持登录状态。
  • 📂 文件列表: 支持获取指定目录的文件和文件夹列表。
  • 📤 文件上传: 实现了完整的文件上传流程,包括预上传(元数据发送)和文件数据传输。
  • 📥 文件下载: 支持获取文件的下载令牌并下载文件内容。
  • 🗑️ 文件删除: 支持将指定的文件或目录移入回收站或永久删除。

🚀 快速开始

1. 环境要求

  • Java 8 或更高版本
  • Gradle7.1.1
  • 一台正在运行 UGOS Pro 系统的绿联 NAS,这里以绿联体验账号为例

创建测试账号

1

2

2. 配置

在项目的 src/main/resources 修改名为 config.properties 的文件,并填 NAS 信息。

config.properties 示例:

# NAS 的访问协议 (http 或 https)
ugos.protocol=https

# NAS 的 IP 地址或域名
ugos.server=your_nas_ip_or_domain

# NAS 的 Web 访问端口
ugos.port=3340

# 您的 NAS 用户名
ugos.username=your_nas_username

# 您的 NAS 密码
ugos.password=your_nas_password

3.💻 如何使用

项目的主要入口点是 com.pewee.ugospro.main 类。您可以直接运行它的 main 方法来执行一个完整的演示流程。 当需要与spring等环境做集成时.具体的会话,client的生命周期需要由开发者自行管理,文件的上传流程与main中的保持一致即可;关于配置文件方面,本项目直接采用了java原生的properties文件,与spring项目集成时,需要将配置写到application.yml中并初始化ugosConfig即可

执行流程如下:

public static void main(String[] args) throws Exception {
    // 1. 加载 config.properties 配置文件
    // ...

    // 2. 根据配置初始化客户端
    UgosClient client = new UgosClient(ugosConfig, urlBuilder);

    // 3. 请求登录用的 RSA 公钥
    String rsa = client.getPasswordRSA();

    // 4. 执行登录,获取包含所有会话凭证的 SessionContainer
    SessionContainer sessionContainer = client.login(rsa);

    // 5. 调用 isLogin 接口刷新会话,确保会话有效
    client.isLogin(sessionContainer);

    // 6. 列出指定目录的文件
    client.listDir(sessionContainer);

    // 7. 上传本地文件到 NAS 的用户家目录
    String filename = "捕获.JPG";
    String dir = "/home/" + ugosConfig.getUsername();
    String path = dir + "/" + filename ;
    client.uploadFile(sessionContainer, arr, filename , file.lastModified(), dir);
    
    // 8. 下载刚刚上传的文件
    InputStream download = client.download(sessionContainer, Lists.newArrayList(path));

    // 9. 删除刚刚上传的文件
    // (参数 `forever` 为 false 表示移入回收站)
    client.deletePaths(sessionContainer, Lists.newArrayList(path), false);
    
}

以某次执行为例 2.5 执行结果如下:

3

由于是面向开发人员,这里不再说明项目如何build

🔬 核心实现简述

本项目核心在于对绿联 NAS 私有 API 的认证和通信机制的模拟。

认证机制 整个认证流程是多层次的,确保了通信安全。

密码加密: 登录密码使用从服务器动态获取的 RSA 公钥进行加密后传输。

会话凭证: 登录成功后,服务器返回 Cookie、token_id (用于 x-ugreen-security-key 请求头) 和一个动态的 token。

API 令牌: 后续所有 API 请求都必须在请求头中携带一个动态生成的 x-ugreen-token,该令牌是将上一步获取的 token 使用登录时下发的另一个 RSA 公钥加密生成的。

文件上传 文件上传采用两步式流程,这是一种健壮的设计模式。

预上传 (元数据请求): 先发送一个包含文件元数据(如文件名、大小、MD5哈希)但不包含文件内容的 multipart/form-data 请求。服务器进行权限、空间等检查。

数据传输: 在元数据验证通过后,再将文件的二进制流发送到服务器。

📦 主要依赖

com.alibaba:fastjson - 用于处理 JSON 数据。

commons-io:commons-io - 用于简化 IO 操作。

org.apache.httpcomponents:httpclient & httpmime - 用于发送 HTTP 请求和处理 multipart/form-data。

⚠️ 免责声明

本项目基于对绿联 NAS 私有 API 的逆向工程,并非官方支持的客户端。API 可能会随着 NAS 固件的更新而发生变化,从而导致此客户端失效。

请仅用于学习和个人项目,使用本项目造成任何后果由使用者自行承担。

👤 作者

pewee

About

a ugreen nas , ugos pro java client

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages