Java操作FastDFS实现文件上传和下载

前言:在GItHub上(地址:https://github.com/happyfish100),作者提供了fastdfs-client-java源码,源码里面提供了操作FastDFS的工具类,所以我们接下来操作要引用源码里面的工具类。
方式一:我们可以直接将下载的fastdfs-client-java源码编译打包,最后将jar包导入maven仓库本地存储目录,然后在项目中引用该jar。
方式二:在项目中引入maven仓库服务器中的fastdfs-client-java依赖,依赖将自动下载到本地仓库,最便捷的方法,接下来我们使用该方法完成测试。
1、新建maven工程,这里命名为:Java_FastDFS_Tools
2、编辑工程pom文件,引入依赖,在文件中添加如下内容:

<dependencies>
        
        <dependency>
            <groupId>cn.bestwugroupId>
            <artifactId>fastdfs-client-javaartifactId>
            <version>1.27version>
        dependency>
        
        <dependency>
            <groupId>org.testnggroupId>
            <artifactId>testngartifactId>
            <version>RELEASEversion>
        dependency>
        
        <dependency>
            <groupId>commons-iogroupId>
            <artifactId>commons-ioartifactId>
            <version>2.6version>
        dependency>
dependencies>

3、在类路径下创建配置文件,引入的jar包中有模板,改一下就好:fdfs_client.conf

connect_timeout = 2
network_timeout = 30
charset = UTF-8
# Tracker配置文件中配置的http端口
http.tracker_http_port = 80
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
# Tracker服务器地址
tracker_server = 192.168.105.133:22122
tracker_server = 192.168.105.134:22122

4、创建Java_Tools类,使用单元测试测试文件上传和下载

import org.apache.commons.io.IOUtils;
import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.testng.annotations.Test;

import java.io.FileOutputStream;
import java.io.IOException;

public class Java_Tools {
    // 本地文件位置
    String local = "C:\\Users\\XY\\Documents\\上传.txt";
    // 声明跟踪器客户端对象
    TrackerClient trackerClient = null;
    // 声明存储器客户端对象
    StorageClient1 storageClient1 = null;
    // 声明跟踪器服务对象
    TrackerServer trackerServer = null;
    // 声明存储器服务对象
    StorageServer storageServer = null;

    // 文件上传
    @Test
    public void testUpload() {
        try {
            // 初始化配置文件
            ClientGlobal.init("fdfs_client.conf");
            // 创建跟踪器客户端对象
            trackerClient = new TrackerClient();
            // 获取跟踪器连接
            trackerServer = trackerClient.getConnection();
            // 获取存储器客户端对象
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            // 上传文件,返回文件标识
            String index = storageClient1.upload_file1(local, null, null);
            // 查看标识
            System.out.println(index);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }

    // 文件下载
    @Test
    public void testDownload() {
        try {
            ClientGlobal.init("fdfs_client.conf");
            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            // 根据文件标识下载文件
            byte[] by = storageClient1.download_file1("group1/M00/00/00/wKhphVrxnTeAPEznAANfM1yHJic535.txt");
            // 将数据写入输出流
            IOUtils.write(by, new FileOutputStream("C:\\Users\\XY\\Documents\\下载.txt"));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }

    // 文件删除
    @Test
    public void testDelete() {
        try {
            ClientGlobal.init("fdfs_client.conf");
            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            // 根据文件标识删除文件,返回0则删除成功
            int i = storageClient1.delete_file1("group1/M00/00/00/wKhphVry2QmAXgH2AANfM1yHJic724.txt");
            if (i == 0) {
                System.out.println("删除成功");
            } else {
                System.out.println("删除失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }

    // 文件信息
    @Test
    public void testGetFileInfo() {
        try {
            ClientGlobal.init("fdfs_client.conf");
            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            // 根据文件标识获取文件信息
            FileInfo fileInfo = storageClient1.get_file_info1("group1/M00/00/00/wKhphVry2QmAXgH2AANfM1yHJic724.txt");
            // 文件IP地址
            System.out.println(fileInfo.getSourceIpAddr());
            // 文件大小
            System.out.println(fileInfo.getFileSize());
            // 创建时间
            System.out.println(fileInfo.getCreateTimestamp());
            // 错误校验码
            System.out.println(fileInfo.getCrc32());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(分布式文件系统)