Skip to content

timmyz/wfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

121 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

分布式文件存储服务

功能概述

本服务提供服务化分布式文件系统功能

场景介绍

提供文件存储接口,支持存放文件、获取文件、获取目录、删除文件、重命名文件等服务化接口

特别说明

根据 dubbo 文档的描述,dubbo 协议并不适合文件传输场景,下引用自 dubbo 文档:

  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

因此根据 dubbo 官方文档的建议,本项目采用 hessian 作为服务化协议。

又由于研发支持的 DSF 框架将 hessian 协议作了精简,经过与主办方沟通,我们基于含有 Hessian 协议的官方 dubbo 版本,建议使用 dubbo-2.5.3.jar。

服务配置

消费者方在dubbo.xml中配置引用服务信息

<dubbo:reference id="wfsIO" interface="com.icbc.wfs.service.WfsIO" version="0.0.1" check="false" />

在使用服务的地方注入服务

@Resource
private WfsIO wfsIO;

接口方法

方法名 方法说明
put 存放文件
get 获取文件
ren 重命名文件
del 删除文件
list 获取目录
package com.icbc.wfs.service;

import java.io.InputStream;
import java.util.List;

public interface WfsIO {
	
	/**
	 * 存放文件
	 * @param path 虚拟路径
	 * @param in 文件流
	 * @return 成功失败
	 */
	boolean put(String path, InputStream in);

	/**
	 * 获取文件
	 * @param path 文件流
	 * @return 文件流
	 */
	InputStream get(String path);
	
	/**
	 * 重命名文件
	 * @param newPath
	 * @param oldPath
	 * @return 成功失败
	 */
	boolean ren(String newPath, String oldPath);
	
	/**
	 * 删除文件
	 * @param path 虚拟路径
	 * @return 成功失败
	 */
	boolean del(String path);
	
	/**
	 * 获取目录
	 * @param path 虚拟路径
	 * @return 文件列表
	 */
	List<String> list(String path);
}

PUT

输入
参数类型 参数名 参数说明 示例值
String path 虚拟路径 "/remoteDir/remoteFile.jpg"
String in 文件流 new FileInputStream("/localDir/localFile.jpg")
输出

​ boolean 成功或失败

异常

如果 path 虚拟路径 为空,则抛出运行时异常"虚拟路径为空" 如果 in 文件流 为空,则抛出运行时异常"文件流为空"

代码示例
/** 存放文件 */
public void put() {
  // 虚拟路径
  String remotePath = "/remoteDir/remoteFile.jpg";
  // 本地文件
  FileInputStream in = new FileInputStream("/localDir/localFile.jpg");
  boolean isSucc = wfsIO.put(remotePath, in);
}

GET

输入
参数类型 参数名 参数说明 示例值
String path 虚拟路径 "/remoteDir/remoteFile.jpg"
输出

​ InputStream 文件流

异常

如果 path 虚拟路径 为空,则抛出运行时异常"虚拟路径为空"

代码示例
/** 获取文件 */
public void get() {
  // 虚拟路径
  String remotePath = "/remoteDir/remoteFile.jpg";
  InputStream stream = wfsIO.get(remotePath);
}

REN

输入
参数类型 参数名 参数说明 示例值
String newPath 新虚拟路径 "/remoteDir/remoteFile.jpg"
String oldPath 原虚拟路径 "/newDir/remoteFile.jpg"
输出

​ boolean 成功或失败

异常

如果 newPath 新虚拟路径 为空,则抛出运行时异常"新虚拟路径为空" 如果 oldPath 新虚拟路径 为空,则抛出运行时异常"原虚拟路径为空" 如果 newPath 新虚拟路径 == oldPath 新虚拟路径,则抛出运行时异常"新虚拟路径不能等于原虚拟路径"

代码示例
/** 重命名文件 */
public void rename() {
  // 原虚拟路径
  String prePath = "/remoteDir/remoteFile.jpg";
  // 新虚拟路径
  String newPath = "/newDir/remoteFile.jpg";
  boolean isSucc = wfsIO.ren(newPath, prePath);
}

DEL

输入
参数类型 参数名 参数说明 示例值
String path 虚拟路径 "/remoteDir/remoteFile.jpg"
输出

​ boolean 成功或失败

异常

如果 path 虚拟路径 为空,则抛出运行时异常"虚拟路径为空"

代码示例
/** 删除文件 */
public void delete() {
  // 虚拟路径
  String remotePath = "/remoteDir/remoteFile.jpg";
  boolean isSucc = wfsIO.del(remotePath);
}

LIST

输入
参数类型 参数名 参数说明 示例值
String path 虚拟路径 "/remoteDir/"
输出

​ List为文件列表,不包含下级目录,如 ​ remoteFile1.jpg ​ remoteFile2.jpg ​ subDir/

异常

如果 path 虚拟路径 为空,则抛出运行时异常"虚拟路径为空"

代码示例
/** 获取目录 */
public void list() {
  // 虚拟路径
  String remoteDir = "/remoteDir/";
  List<String> fileList = wfsIO.list(remoteDir);
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages