FastDFS java api调用

介绍

本文讲述如何通过java调用FastDFS的文件上传、下载及删除,提供示例代码。

编译fastdfs-client-java

需要环境git、jdk8、maven

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

cd fastdfs-client-java/

mvn package

配置

target目录中就会产生fastdfs-client-java-x.jar文件

复制该文件到项目中的src/main/resources/lib目录中

添加maven依赖

        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/fastdfs-client-java-1.27-SNAPSHOT.jar</systemPath>
            <version>1.27-SNAPSHOT</version>
        </dependency>

resources配置目录下添加配置文件fdfs_client.conf

tracker_server=192.168.81.143:22122

#注意ip和端口要指向服务器的fastdfs服务,如果有防火墙的要做好开放处理

代码实现

-------FastDFSHelper.java

import lombok.extern.slf4j.Slf4j;
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

@Slf4j
public final class FastDFSHelper {
    private static TrackerClient trackerClient;

    static {
        try {
            ClientGlobal.init("fdfs_client.conf");
            trackerClient = new TrackerClient();
        } catch (IOException | MyException e) {
            log.error("error", e);
        }
    }

    /**
     * 向FastDFS上传文件
     *
     * @param localFilename 本地文件名
     * @return 上传成功,返回组名和该文件在FastDFS中的名称;上传失败,返回null
     */
    public static String[] uploadFile(String localFilename) {
        TrackerServer trackerServer;
        try {
            trackerServer = trackerClient.getConnection();
        } catch (IOException e) {
            log.error("error", e);
            return null;
        }
        StorageClient storageClient = new StorageClient(trackerServer, null);
        try {
            String[] arr = storageClient.upload_file(localFilename, null, null);
            if (arr == null || arr.length != 2) {
                log.error("向FastDFS上传文件失败");
            } else {
                log.info("向FastDFS上传文件成功");
                log.info("id:{}/{}",arr);
                return arr;
            }
        } catch (IOException | MyException e) {
            log.error("error", e);
        } finally {
            closeTrackerServer(trackerServer);
        }
        return null;
    }

    /**
     * 从FastDFS下载文件
     *
     * @param localFilename  本地文件名
     * @param groupName      文件在FastDFS中的组名
     * @param remoteFilename 文件在FastDFS中的名称
     */
    public static boolean downloadFile(String localFilename, String groupName, String remoteFilename) {
        TrackerServer trackerServer;
        try {
            trackerServer = trackerClient.getConnection();
        } catch (IOException e) {
            log.error("error", e);
            return false;
        }
        StorageClient storageClient = new StorageClient(trackerServer, null);
        File file = new File(localFilename);
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
            byte[] content = storageClient.download_file(groupName, remoteFilename);
            if (content == null || content.length == 0) {
                log.error("文件大小为空!");
                boolean flag = file.delete();
                log.info("删除文件结果:{}", flag);
                return false;
            }
            bos.write(content);
            log.info("成功下载文件: " + localFilename);
            return true;
        } catch (IOException | MyException e) {
            log.error("error", e);
        } finally {
            closeTrackerServer(trackerServer);
        }
        return false;
    }

    /**
     * 从FastDFS删除文件
     *
     * @param groupName      文件在FastDFS中的组名
     * @param remoteFilename 文件在FastDFS中的名称
     */
    public static boolean deleteFile(String groupName, String remoteFilename) {
        TrackerServer trackerServer;
        try {
            trackerServer = trackerClient.getConnection();
        } catch (IOException e) {
            log.error("error", e);
            return false;
        }
        StorageClient storageClient = new StorageClient(trackerServer, null);
        try {
            int i = storageClient.delete_file(groupName, remoteFilename);
            if (i == 0) {
                log.info("FastDFS删除文件成功");
                return true;
            } else {
                log.info("FastDFS删除文件失败");
                return false;
            }
        } catch (IOException | MyException e) {
            log.error("error", e);
        } finally {
            closeTrackerServer(trackerServer);
        }
        return false;
    }

    private static void closeTrackerServer(TrackerServer trackerServer) {
        try {
            if (trackerServer != null) {
                log.info("关闭trackerServer连接");
                trackerServer.close();
            }
        } catch (IOException e) {
            log.error("error", e);
        }
    }
}

----------FastdfsdemoApplication.java

public class FastdfsdemoApplication {
    public static void main(String[] args) {
        String[] arr= FastDFSHelper.uploadFile("/home/whq/a.txt");
        if(arr!=null){
            boolean result= FastDFSHelper.downloadFile("/home/whq/a2.txt",arr[0],arr[1]);
            boolean result2=FastDFSHelper.deleteFile(arr[0],arr[1]);
        }
    }
}

 参考资料

https://blog.csdn.net/csdlwzy/article/details/83309831

发布了426 篇原创文章 · 获赞 33 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/whq12789/article/details/103082511