JAVA下FastDFS客户端开发使用及遇到的问题

JAVA下FastDFS客户端开发使用及遇到的问题

什么是FastDFS分布式文件系统?

FastDFS是一款类似Google FS的开源分布式文件系统,是纯C语言开发并且开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS用来干什么?

如上所述,我们可以使用FastDFS来储存图片或做与服务器的文件上传下载交互。

服务器端FastDFS如何简便安装和Springboot如何集成开发可以看上一篇转载文章

本篇主要讲解客户端该如何操作FastDFS

1、由于在maven中央仓库中没有FastDFS的jar包,所以需要自己先下载源码

我的github下载地址:https://github.com/554197854/fastdfs-client-java

上面REAM.ME有相关介绍,可以看一看

2、用eclipse或者idea打开下载的文件项目并且使用maven的install命令安装到本地仓库

查看本地仓库,可以看到已经成功安装

JAVA下FastDFS客户端开发使用及遇到的问题_第1张图片

3、在自己需要使用FastDFS的项目中添加如下依赖

<dependency>
    <groupId>org.csourcegroupId>
    <artifactId>fastdfs-client-javaartifactId>
    <version>1.27-SNAPSHOTversion>
dependency>

4、在项目中创建一个xxx.conf的配置文件 名字自取conf结尾

配置文件中可以配置的内容可以参考我的github中README.md参看

xxx.conf中必须要配置的项目如下

tracker_server=192.168.31.99:22122  //必须配置一个tracker的服务器ip地址及端口,多台则可以配多个

5、测试代码

package com.shop.fastdfs;

import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;

import java.io.IOException;

/**
 * @author N
 * @create 2018/12/25 -- 19:59
 * @email [email protected]
 */
public class FastDfsTest {
    @Test
    public void testUpload() throws Exception{
        try {
            
            //初始化配置文件,需要conf的真实地址,并且需要抛出异常
            ClientGlobal.init("D:\\workspace_IDEA\\Shop-Project\\shop-manager\\shop-manager-web\\src\\main\\resources\\resource\\client.conf");

            //创建Tracker客户端
            TrackerClient trackerClient = new TrackerClient();

            //创建Tracker服务器连接对象
            TrackerServer trackerServer = trackerClient.getConnection();

            //创建一个StoreStorage服务器对象,没有配置则返回null,如果在配置文件中有配置:trackerClient.getStoreStorage()
            StorageServer storageServer = null;

            //通过上述的两个服务器对象,得到一个Storage客户端
            StorageClient storageClient = new StorageClient(trackerServer,storageServer);

            //使用Storage客户端操作文件上传下载
            //上传本地图片
            String[] strings = storageClient.upload_file("D:\\default_icon.png", "png", null);
            for(String string:strings){
                System.out.println(string);
            }

            //使用完后关闭
            //storageServer.close(); storageServer为null 所以不需要close
            trackerServer.close();


        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行成功:

打印返回信息包含 组 和 图片 位置
在这里插入图片描述
访问服务器地址:
JAVA下FastDFS客户端开发使用及遇到的问题_第2张图片

第一次遇到的问题

如果出现如下错误,应该是服务端端口ip配置错误。

JAVA下FastDFS客户端开发使用及遇到的问题_第3张图片

进入docker容器查看配置文件,发现之前在CentOS 虚拟机上使用docker安装服务端时端口号错误

192.168.31.99:22122 写成了192.168.99.31:22122

JAVA下FastDFS客户端开发使用及遇到的问题_第4张图片
附上一个好用的FastDFS工具类

package com.shop.fastdfs;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;

/**
 * @author N
 * @create 2018/12/26 -- 1:39
 * @email [email protected]
 */
public class FastDFSUtils {

        private TrackerClient trackerClient = null;
        private TrackerServer trackerServer = null;
        private StorageServer storageServer = null;
        //使用StorageClient1进行上传
        private StorageClient1 storageClient1 = null;

        public FastDFSUtils(String conf) throws Exception {
            //获取classpath路径下配置文件"fdfs_client.conf"的路径
            //conf直接写相对于classpath的位置,不需要写classpath:
            String configPath = this.getClass().getClassLoader().getResource(conf).getFile();

            ClientGlobal.init(configPath);

            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();
            storageServer = trackerClient.getStoreStorage(trackerServer);
            storageClient1 = new StorageClient1(trackerServer, storageServer);
        }

        public String uploadFile(byte[] file_buff, String file_ext_name,NameValuePair[] meta_list) throws Exception { //远程上传

            String result = storageClient1.upload_file1(file_buff, file_ext_name, meta_list);
            result="http://192.168.31.99:8080/"+result;//我的服务器地址+返回的图片存储路径,服务器地址也可以改为从配置文件读取
            return result;
        }

        public String uploadFile(String local_filename, String file_ext_name, NameValuePair[] meta_list) throws Exception { //本地上传

            String result = storageClient1.upload_file1(local_filename, file_ext_name, meta_list);
            result="http://192.168.31.99:8080/"+result; //我的服务器地址+返回的图片存储路径,服务器地址也可以改为从配置文件读取
            return result;
        }
}

测试使用:

	@Test
    public  void testUtils() throws Exception{
        FastDFSUtils fastDFSUtils =new FastDFSUtils("resource/client.conf");
        String file = fastDFSUtils.uploadFile("D:\\default_icon.png", "png", null);
        System.out.println(file);
    }

打印结果:
JAVA下FastDFS客户端开发使用及遇到的问题_第5张图片

你可能感兴趣的:(Java)