##1、 搭建服务节点群
1.参照多节点组网章节,进行多节点组网,并部署系统合约;系统合约部署成功以后将输出系统代理合约(SystemProxy)、FileInfoManager和FileServerManager三个合约地址, 示例输出如下:
2.配置config.json文件中的dfsGroup,dfsNode,dfsStorage三个参数,并更新systemproxyaddress参数为上一步得到的系统代理合约地址,具体参数定义请参看参数配置文件章节;在群组和节点的关系定义上,通常一个节点只允许加入一个群组,多个节点如果配置一样的群组ID,节点启动以后将加入到同一个群组当中,反之亦然。
3.重启群组所有节点即可用启动DFS服务。DFS服务启动后,即可以通过JAVA SDK提供的方法进行文件存取操作。
##2、使用说明
JAVA SDK提供的接口功能包括文件上传,文件删除,文件下载,查询文件服务节点,添加服务节点,删除服务节点等。所提供接口为异步回调节接口,用户需要自定义回调监听处理类。SDK的核心类为DfsEngine,位于仓库的tool/java目录,为eclipse工程,依赖于同级目录的web3j项目。
###2.1接口说明
接口名称:init
接口功能说明:初始化服务
参数说明
输入参数
参数类型
参数说明
host
String
主机地址
port
int
JSONRPC端口
listener
IJuListener
监听回调接口
walletPasswd
String
加密口令
walletFile
String
钱包文件
fileContract
String
文件合约地址
serverContract
String
文件服务合约地址
输出参数
参数说明
参数说明
返回值
int
0 :成功 其他:失败
(2). 添加服务节点(所有启动的节点都需要添加)
接口名称:addServer
接口功能说明:添加服务节点
参数说明
输入参数
参数类型
参数说明
newServer
FileServer
分布式文件服务节点
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:addServerCallback
接口功能说明:添加文件服务节点对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
server
FileInfo
文件信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:uploadFile
接口功能说明:上传文件
参数说明
输入参数
参数类型
参数说明
fileInfo
FileInfo
文件信息
file
String
文件路径
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:uploadFileCallback
接口功能说明:上传文件对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
fileInfo
FileInfo
文件信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:downloadFile
接口功能说明:下载文件
参数说明
输入参数
参数类型
参数说明
fileServer
FileServer
文件服务节点信息
fileid
String
文件ID
store_path
String
文件存储完整路径
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:downloadFileCallback
接口功能说明:下载文件对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
fileInfo
FileInfo
文件信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:deleteFile
接口功能说明:删除文件
参数说明
输入参数
参数类型
参数说明
fileServer
FileServer
文件服务节点信息
fileid
String
文件ID
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:deleteFileCallback
接口功能说明:删除文件对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
fileInfo
FileInfo
文件信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:addServer
接口功能说明:添加文件服务器节点
参数说明
输入参数
参数类型
参数说明
fileServer
FileServer
文件服务节点信息
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:addServerCallback
接口功能说明:添加文件服务器节点对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
server
FileInfo
文件信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:deleteServer
接口功能说明:删除文件服务器节点
参数说明
输入参数
参数类型
参数说明
serverid
String
文件服务节点ID
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:deleteServerCallback
接口功能说明:删除文件服务器节点对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
server
FileServer
文件服务节点信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:listServers
接口功能说明:获取文件服务节点列表
参数说明
输入参数
参数类型
参数说明
NA
NA
NA
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:listServersCallback
接口功能说明:获取文件服务节点列表对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
fileservers
Vector
文件服务节点信息
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:listFilesByGroup
接口功能说明:按节点群组列举出所有文件信息
参数说明
输入参数
参数类型
参数说明
group
String
服务节点群ID
输出参数
参数类型
参数说明
返回值
int
0 :成功 其他:失败
接口名称:listServersByGroupCallback
接口功能说明:按节点群组列举出所有文件信息对应回调接口(即注册监听器回调函数)
参数说明
输入参数
参数类型
参数说明
fileservers
Vector
文件信息列表
ret
int
返回值
输出参数
参数类型
参数说明
NA
NA
NA
接口名称:errorCallback
接口功能说明:按节点群组列举出所有文件信息
参数说明
输入参数
参数类型
参数说明
code
int
错误码
error
String
错误信息
输出参数
参数类型
参数说明
NA
NA
NA
###2.2使用举例
下面是一个完整展示如何使用分布式文件存储和访问功能的实例。示例代码可以参看源码工程,源代码具体位置为com.sample包的HelloDfs类。
1.定义回调监听类
public class HelloListener implements IDfsListener{
// 回调接口实现
...
...
}
2.初始化SDK
String walletPassword = " 1111" ;// 钱包口令
String keyPath = " E:\\ keys\\ 2429feaf-0e46-ddd5-5b72-0594e0a4ab00.json" ;// 钱包文件
String fileContract = " 0x9e86c1b4c4d82607298faac27da7d78364434c58" ;// 文件信息合约地址
String fileServerContract = " 0x0d76426479e438fe0d261dbb165cd3adcc4a1dd7" ;// 文件服务合约地址
Strign host = " 192.168.1.232" ;// 服务节点主机
int port = 8545 ;// JSONRPC端口
init (host, port, TestListener, walletPassword, keyPath, fileContract, fileServerContract);// 初始化
3.添加文件服务节点
FileServer fileServer = new FileServer();
fileServer.setGroup(" group1" );
fileServer.setId(" 0c1585a170e75c14564427f2faa8d74850c65765a10ce9aa4fcc55c7cdd60ab7768dd7fa066145d0ebada2214705fca7f464186e61ea163a18e6ebb9c99c7627" );
fileServer.setHost(" 192.168.1.232" );
fileServer.setPort(8545 );
fileServer.setInfo(" the master node" );
fileServer.setOrganization(" weiwan" );
fileServer.setEnable(1 );
Calendar calendar = Calendar.getInstance();
fileServer.setUpdateTime((int )calendar.getTime().getTime()/1000 );
addServer (fileServer);// 添加文件服务节点,等待回调add_server_back成功
4.上传文件
FileInfo fileInfo = new FileInfo();
fileInfo.setOwner(" weiwan" );
fileInfo.setPriviliges(" rwx" );
String file = " E:" + File.separatorChar + " test.txt" ;
uploadFile (fileInfo, file);// 上传文件,等待回调upload_file_back
// ...回调成功
// 回调返回文件ID,可以使用文件ID下载和操作文件
// 另外在配置文件目录,可以查看文件