FastDFS的安装(3)——FastDFS Java Client操作FastDFS

本文介绍如何从源码构建FastDFS的Java客户端并将其部署到Maven项目中,包括下载源码、构建jar包、添加依赖、配置fdfs_client.conf文件、编写FastDFSClientUtils工具类以及进行上传、下载、删除文件的测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、下载fastdfs-client-java的源代码

在Github上下载fastdfs-client-java的源代码。

https://github.com/happyfish100/fastdfs-client-java

2、使用maven从源码安装、构建jar包
mvn clean install
3、使用maven将jar文件安装到本地仓库
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=${version} -Dpackaging=jar -Dfile=fastdfs-client-java-${version}.jar
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.27-SNAPSHOT -Dpackaging=jar -Dfile=E:\fastdfs-client-java-1.27-SNAPSHOT.jar
4、在maven项目pom.xml中添加依赖、
<dependency>
    <groupId>org.csource</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27-SNAPSHOT</version>
</dependency>
5、新建fdfs_client.conf文件

在src/main/resources中新建fdfs_client.conf文件,内容如下:

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 22122
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.1.109:22122
#tracker_server = 192.168.1.110:22122

注1:tracker_server指向您自己IP地址和端口,1-n个
注2:除了tracker_server,其它配置项都是可选的

6、编写工具类FastDFSClientUtils
package com.fastdfs.demo;


import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerGroup;
import org.csource.fastdfs.TrackerServer;

/**
 * <B>系统名称:</B><BR>
 * <B>模块名称:</B><BR>
 * <B>中文类名:</B>FastDFS分布式文件系统操作客户端<BR>
 * <B>概要说明:</B>FastDFS分布式文件系统操作客户端<BR>
 *
 * @author bhz
 * @since 2013年11月10日
 */
public class FastDFSClientUtils {

    private static final String CONF_FILENAME = Thread.currentThread().getContextClassLoader().getResource("fdfs_client.conf").getPath();

    private static Logger logger = Logger.getLogger(FastDFSClientUtils.class);


    private static TrackerClient trackerClient;


    //加载文件
    static {
        try {
            ClientGlobal.init(CONF_FILENAME);
            TrackerGroup trackerGroup = ClientGlobal.g_tracker_group;
            trackerClient = new TrackerClient(trackerGroup);
        } catch (Exception e) {
            logger.error(e);
        }
    }

    /**
     * <B>方法名称:</B>上传方法<BR>
     * <B>概要说明:</B><BR>
     *
     * @param file 文件
     * @param path 路径
     * @return 上传成功返回id,失败返回null
     */
    public static String upload(File file, String path) {
        TrackerServer trackerServer = null;
        StorageServer storageServer = null;
        StorageClient1 storageClient1 = null;
        FileInputStream fis = null;
        try {
            NameValuePair[] meta_list = null; // new NameValuePair[0];
            fis = new FileInputStream(file);
            byte[] file_buff = null;
            if (fis != null) {
                int len = fis.available();
                file_buff = new byte[len];
                fis.read(file_buff);
            }

            trackerServer = trackerClient.getConnection();
            if (trackerServer == null) {
                logger.error("getConnection return null");
            }
            storageServer = trackerClient.getStoreStorage(trackerServer);
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            String fileid = storageClient1.upload_file1(file_buff, getFileExt(path), meta_list);

            return fileid;
        } catch (Exception ex) {
            logger.error(ex);
            return null;
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    logger.error(e);
                }
            }
            if (storageServer != null) {
                try {
                    storageServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (trackerServer != null) {
                try {
                    trackerServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            storageClient1 = null;
        }
    }

    /**
     * <B>方法名称:</B>上传方法<BR>
     * <B>概要说明:</B><BR>
     *
     * @param data 数据
     * @param extName 路径
     * @return 上传成功返回id,失败返回null
     */
    public static String upload(byte[] data, String extName) {
        TrackerServer trackerServer = null;
        StorageServer storageServer = null;
        StorageClient1 storageClient1 = null;
        try {
            NameValuePair[] meta_list = null; // new NameValuePair[0];

            trackerServer = trackerClient.getConnection();
            if (trackerServer == null) {
                logger.error("getConnection return null");
            }
            storageServer = trackerClient.getStoreStorage(trackerServer);
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            String fileid = storageClient1.upload_file1(data, extName, meta_list);
            return fileid;
        } catch (Exception ex) {
            logger.error(ex);
            return null;
        } finally {
            if (storageServer != null) {
                try {
                    storageServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (trackerServer != null) {
                try {
                    trackerServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            storageClient1 = null;
        }
    }

    /**
     * <B>方法名称:</B>下载方法<BR>
     * <B>概要说明:</B>通过文件id进行下载<BR>
     *
     * @param fileId 文件id
     * @return 返回InputStream
     */
    public static InputStream download(String groupName, String fileId) {
        TrackerServer trackerServer = null;
        StorageServer storageServer = null;
        StorageClient1 storageClient1 = null;
        try {
            trackerServer = trackerClient.getConnection();
            if (trackerServer == null) {
                logger.error("getConnection return null");
            }
            storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            byte[] bytes = storageClient1.download_file1(fileId);
            InputStream inputStream = new ByteArrayInputStream(bytes);
            return inputStream;
        } catch (Exception ex) {
            logger.error(ex);
            return null;
        } finally {
            if (storageServer != null) {
                try {
                    storageServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (trackerServer != null) {
                try {
                    trackerServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            storageClient1 = null;
        }
    }

    /**
     * <B>方法名称:</B>删除方法<BR>
     * <B>概要说明:</B>根据id来删除一个文件<BR>
     *
     * @param fileId 文件id
     * @return 删除成功返回0,非0则操作失败,返回错误代码
     */
    public static int delete(String groupName, String fileId) {
        TrackerServer trackerServer = null;
        StorageServer storageServer = null;
        StorageClient1 storageClient1 = null;
        try {
            trackerServer = trackerClient.getConnection();
            if (trackerServer == null) {
                logger.error("getConnection return null");
            }
            storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
            storageClient1 = new StorageClient1(trackerServer, storageServer);
            int result = storageClient1.delete_file1(fileId);
            return result;
        } catch (Exception ex) {
            logger.error(ex);
            return 0;
        } finally {
            if (storageServer != null) {
                try {
                    storageServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (trackerServer != null) {
                try {
                    trackerServer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            storageClient1 = null;
        }
    }

    /**
     * <B>方法名称:</B><BR>
     * <B>概要说明:</B><BR>
     *
     * @param oldFileId 旧文件id
     * @param file      新文件
     * @param path      新文件路径
     * @return 上传成功返回id,失败返回null
     */
    public static String modify(String oldGroupName, String oldFileId, File file, String path) {
        String fileid = null;
        try {
            // 先上传
            fileid = upload(file, path);
            if (fileid == null) {
                return null;
            }
            // 再删除
            int delResult = delete(oldGroupName, oldFileId);
            if (delResult != 0) {
                return null;
            }
        } catch (Exception ex) {
            logger.error(ex);
            return null;
        }
        return fileid;
    }

    /**
     * <B>方法名称:</B>获取文件后缀名<BR>
     * <B>概要说明:</B>获取文件后缀名<BR>
     *
     * @param fileName
     * @return 如:"jpg"、"txt"、"zip" 等
     */
    private static String getFileExt(String fileName) {
        if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
            return "";
        } else {
            return fileName.substring(fileName.lastIndexOf(".") + 1);
        }
    }
}

7、测试
package com.fastdfs.demo;


import java.io.File;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;


public class FastDFSTest {

    /**
     * 上传
     */
    public static void upload() throws Exception {
//        String path = System.getProperty("user.dir") + File.separatorChar + "source" + File.separatorChar + "001.jpg";
        String path = "E:\\168.jpg";
        File file = new File(path);
        String fileId = FastDFSClientUtils.upload(file, path);
        System.out.println("本地文件:" + path + ",上传成功! 文件ID为:" + fileId);
    }

    /**
     * 下载
     */
    public static void download() throws Exception {
        // id:    group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        // url:    http://192.168.1.170/fastdfs/group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        String fileId = "group1/M00/00/00/wKgBr1crUIuAJ22iAADHTIxNXeI872.jpg";
        InputStream inputStream = FastDFSClientUtils.download("group1", fileId);
        System.out.println(inputStream.available());
        String path = System.getProperty("user.dir") + File.separatorChar + "receive" + File.separatorChar + "001.jpg";
        System.out.println(path);
        //FileUtils.copyInputStreamToFile(inputStream,  new File(path));
    }

    /**
     * 删除
     */
    public static void delete() throws Exception {
        String fileId = "group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg";
        int result = FastDFSClientUtils.delete("group1", fileId);
        System.out.println(result == 0 ? "删除成功" : "删除失败:" + result);
    }


    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {


        upload();
//        download();
//        Thread.sleep(10000);
//        download();
//        Thread.sleep(10000);
//        download();
//        delete();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值