FastDFS(三) FastDFS Java 客户端 API  简单应用

Java  客户端 API  简单应用

1 依赖

<dependency>
	<groupId>cn.bestwu</groupId>
	<artifactId>fastdfs-client-java</artifactId>
	<version>1.27</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.4</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.4</version>
</dependency>


2 创建客户端

2.1 根据 conf  文件创建客户端

2.1.1conf  配置文件

# 连接超时, 单位是秒
connect_timeout = 10
# 网络超时, 单位是秒
network_timeout = 30
# 字符集设置
charset = UTF-8
# 必须和tracker server中的/etc/fdfs/tracker.conf配置文件中的http.server_port=8080配置一致
http.tracker_http_port = 8080
# tracker server 的访问 IP 和 Port。
tracker_server = 192.168.199.224:22122

2.1.2 代码

package singe;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import java.io.IOException;
public class TestInitClientByConf {
	// 配置文件所在位置。
	private final String configFile = "src/main/resources/test/fdfs_client.conf";
	/**
	* 根据相对路径,直接加载配置文件。
	* 加载的是 xxx.conf 配置文件。
	* 默认的加载路径是相对地址。是相对于项目的根开始寻址的。不是相对于 classpath
	开始寻址的。
	*/
	@Test
	public void initClient() throws IOException, MyException {
		// 使用 conf 配置文件初始化环境。MyException 是 FastDFS 定义的自定义异常,其
		处理的就是加载链接超时,网络超时,tracker 服务器列表加载异常等。
		ClientGlobal.init(configFile);
		// this.initByProperties();
		TrackerClient trackerClient = new TrackerClient(); // new
		TrackerClient(TrackerGlobal.g_tracker_group);
		// 创建 tracker 服务器的链接对象
		TrackerServer trackerServer = trackerClient.getConnection();
		// 创建 storage 服务器的链接对象
		StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
		// 创建 storage 服务器的客户端操作对象。可以实现文件的读写操作。
		StorageClient storageClient = new StorageClient(trackerServer, storageServer);
		System.out.println("TrackerClient : " + trackerClient);
		System.out.println("TrackerServer : " + trackerServer);
		System.out.println("StorageServer : " + storageServer);
		System.out.println("StorageClient : " + storageClient);
	}
}

2.2 根据 properties  文件创建客户端

2.2.1properties  配置文件

# 连接超时, 单位是秒
fastdfs.connect_timeout_in_seconds=10
# 网络超时, 单位是秒
fastdfs.network_timeout_in_seconds=30
# 字符集设置
fastdfs.charset=UTF-8
# 必须和tracker server中的/etc/fdfs/tracker.conf配置文件中的http.server_port=8080配置一致
fastdfs.http_tracker_http_port=8080
# tracker server 的访问 IP 和 Port。
fastdfs.tracker_servers=192.168.89.152:22122

2.2.2 代码

package singe;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class TestInitClientByProperties {
	private final Properties props = new Properties();
	/**
	* 根据 Properties,加载配置文件。
	* 加载 properties 配置文件,生成一个 Properties 对象。再实现环境的初始化。
	*/
	@Test
	public void initClient() throws IOException, MyException {
		// 使用 Properties 配置文件初始化环境。
		InputStream in = TestSingle.class.getClassLoader().getResourceAsStream("test/fdfs_client.properties");
		props.load(in);
		ClientGlobal.initByProperties(props);
		// this.initByProperties();
		TrackerClient trackerClient = new TrackerClient(); // new
		TrackerClient(TrackerGlobal.g_tracker_group);
		// 创建 tracker 服务器的链接对象
		TrackerServer trackerServer = trackerClient.getConnection();
		// 创建 storage 服务器的链接对象
		StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
		// 创建 storage 服务器的客户端操作对象。可以实现文件的读写操作。
		StorageClient storageClient = new StorageClient(trackerServer, storageServer);
		System.out.println("TrackerClient : " + trackerClient);
		System.out.println("TrackerServer : " + trackerServer);
		System.out.println("StorageServer : " + storageServer);
		System.out.println("StorageClient : " + storageClient);
	}
}


3 定义 FastDFS  工具类

package singe;
import org.csource.fastdfs.*;
public class FastDFSClientUtils {
	// 配置文件所在位置。
	private static final String configFile = "src/main/resources/test/fdfs_client.conf";
	private static StorageClient storageClient;
	static{
		try {
			// 使用 conf 配置文件初始化环境。就是加载链接超时,网络超时,tracker 服
			务器列表等。
			ClientGlobal.init(configFile);
			// this.initByProperties();
			TrackerClient trackerClient = new TrackerClient(); // new
			TrackerClient(TrackerGlobal.g_tracker_group);
			// 创建 tracker 服务器的链接对象
			TrackerServer trackerServer = trackerClient.getConnection();
			// 创建 storage 服务器的链接对象
			StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
			// 创建 storage 服务器的客户端操作对象。可以实现文件的读写操作。
			storageClient = new StorageClient(trackerServer, storageServer);
		}catch(Exception e){
			e.printStackTrace();
			throw new ExceptionInInitializerError(e);
		}
	}
	public static StorageClient getStorageClient(){
		return storageClient;
	}
	public static void main(String[] args) {
		System.out.println(getStorageClient());
	}
}


4 文件上传

4.1 代码

package singe;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.StorageClient;
import org.junit.Test;
public class TestFileUpload {
	@Test
	public void test() {
		String fileIds[] = testUpload("testFile", "1.jpg", "jpg");
		if(fileIds == null){
			System.out.println("文件上传失败!");
		}
		System.out.println(fileIds.length);
		System.out.println("组名/卷名:" + fileIds[0]);
		System.out.println("路径: " + fileIds[1]);
	}
	public String[] testUpload(String dirName, String fileName, String fileType){
		StorageClient storageClient = FastDFSClientUtils.getStorageClient();
		try{
			// 要上传的文件的元数据。可以自定义。
			NameValuePair nvp [] = new NameValuePair[]{
				new NameValuePair("filename", fileName)
			};
			/*
			* String[] upload_file(String fileName, String fileExtName, NameValuePair[] metaList)
			* fileName - 要上传的本地文件,包含路径地址。
			* fileExtName - 文件后缀名;可以不传递,也就是传递一个 null。FastDFS可以自动的在文件名中截取文件类型。
			* metaList - 文件的描述元数据。
			* 返回的结果是一个字符串数组。长度为 2。0 位置是卷名-group1,1 位置是文件名-M00/00/00/xxxxxx
			*/
			String fileIds[] = storageClient.upload_file(dirName+"/"+fileName, fileType, nvp);
			return fileIds;
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
}

4.2 结果


5 文件下载

5.1 代码

package singe;
import org.apache.commons.io.IOUtils;
import org.csource.fastdfs.StorageClient;
import org.junit.Test;
import java.io.FileOutputStream;
import java.util.UUID;
public class TestFileDownload {
	@Test
	public void test(){
		testDownload("group1","M00/00/00/wKhZmV2j38aATN0PAADW-MWxcrw140.jpg");
	}
	public void testDownload(String groupName, String remoteFileName){
		StorageClient storageClient = FastDFSClientUtils.getStorageClient();
		try{
			/*
			* byte[] download_file(String groupName, String remoteFileName)
			* groupName - 要下载的文件的卷名
			* remoteFileName - 要下载的文件的远程文件名
			* 返回值是要下载的文件的字节数组。
			*/
			byte[] buff = storageClient.download_file(groupName, remoteFileName);
			/*
			* NameValuePair[] get_metadata(String groupName, String remoteFileName)
			* groupName - 要查找元数据的文件的卷名
			* remoteFileName - 要查找元数据的文件的远程文件名
			* 返回值是要查找元数据的文件的元数据数组。
			*/
			NameValuePair[] metaList = storageClient.get_metadata(groupName,remoteFileName);
			String fileName = null;
			for(int i = 0; i < metaList.length; i++){
				NameValuePair nvp = metaList[i];
				if(nvp.getName().equals("fileName"))
				fileName = nvp.getValue();
			}
			IOUtils.write(buff, new FileOutputStream("downloadFile/"+ fileName));
			System.out.println("下载完成");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

5.2 结果


6 删除文件

6.1 代码

package singe;
import org.csource.fastdfs.StorageClient;
import org.junit.Test;
public class TestFileDelete {
	@Test
	public void test(){
		testDelete("group1", "M00/00/00/wKhZmV2j38aATN0PAADW-MWxcrw140.jpg");
	}
	public void testDelete(String groupName, String remoteFileName){
		StorageClient storageClient = FastDFSClientUtils.getStorageClient();
		try{
			/*
			* int delete_file(String groupName, String remoteFileName)
			* groupName - 要删除的文件卷名
			* remoteFileName - 要删除的文件的远程文件名
			* 返回 0 为成功删除, 其他为删除失败。
			*/
			int flag = storageClient.delete_file(groupName, remoteFileName);
			System.out.println(flag == 0 ? "删除成功" : "删除失败");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

6.2 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要下载fastdfs-client-java:1.29-snapshot,可以按照以下步骤进行: 首先,打开一个可用的Web浏览器,例如Google Chrome或Mozilla Firefox。 在浏览器的搜索栏中输入“fastdfs-client-java:1.29-snapshot下载”进行搜索。 选择一个可靠的下载站点,例如GitHub或官方网站。 在下载站点上搜索fastdfs-client-java:1.29-snapshot,并找到对应的下载链接。 点击下载链接,将文件保存到本地计算机上的指定位置。 下载完成后,检查所下载文件的完整性和安全性。可以使用杀毒软件进行扫描,确保文件没有病毒或恶意软件。 解压下载的文件(如果有必要),并查看其中的文档或说明,以了解如何使用fastdfs-client-java:1.29-snapshot。 根据文档中的说明,将fastdfs-client-java:1.29-snapshot导入到项目中。 根据具体项目需求,配置和使用fastdfs-client-java:1.29-snapshot进行文件存储或处理操作。 需要注意的是,fastdfs-client-java:1.29-snapshot是一个开源的Java客户端库,用于与FastDFS分布式文件系统进行交互。它提供了一些API和方法,可以方便地在Java项目中使用FastDFS。在使用该库之前,确保了解FastDFS的基本原理和配置要求,以便正确地使用和配置fastdfs-client-java:1.29-snapshot。 ### 回答2: 要下载fastdfs-client-java:1.29-snapshot,您可以按照以下步骤进行操作: 1. 打开您的网络浏览器,例如谷歌浏览器、火狐浏览器等。 2. 在搜索引擎中输入“fastdfs-client-java:1.29-snapshot下载”,然后按下Enter键。 3. 在搜索结果中,找到适合您系统版本的fastdfs-client-java:1.29-snapshot下载链接。 4. 单击该链接,可能会弹出文件下载对话框,您可以选择保存文件的位置。 5. 选择一个合适的文件保存位置,然后单击“保存”按钮。 6. 下载开始后,请耐心等待直到文件完成下载。 7. 下载完成后,您可以前往保存文件的位置查看下载的文件。 请注意,根据您的网络速度和服务器响应时间,下载过程可能需要一些时间。而且请确保从可信赖的网站下载文件,以确保文件的完整性和安全性。 ### 回答3: 要下载fastdfs-client-java:1.29-snapshot,可以按照以下步骤进行操作: 1. 打开浏览器,进入FastDFS官方GitHub仓库的页面(https://github.com/happyfish100/fastdfs-client-java)。 2. 在页面上找到并点击"Code"按钮,然后选择"Download ZIP"选项,即可将整个代码库以zip压缩包的形式下载到本地。 3. 下载完成后,解压缩该zip压缩包,得到一个文件夹,里面包含了fastdfs-client-java的全部源代码。 4. 进入解压后的文件夹,可以看到该项目的源代码文件和相关配置文件。 5. 如果需要编译和构建项目,需要安装maven(https://maven.apache.org/),并在命令行中进入到该项目根目录下。 6. 使用maven命令进行项目构建,例如运行"mvn clean install"命令,该命令会下载所有依赖库并编译项目。 7. 若只需要使用已经编译好的jar包,则可以直接在该项目的GitHub页面上找到可用的jar包下载链接。 8. 点击下载链接,将fastdfs-client-java:1.29-snapshot的jar包保存到本地。 至此,你已经成功下载了fastdfs-client-java:1.29-snapshot。你可以将该jar包导入到你的Java项目中,以使用fastdfs-client-java提供的功能。需要注意的是,如果你在经过以上步骤后遇到了任何问题,建议查阅FastDFS官方文档或向FastDFS社区提问以获得更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值