FastDFS的API使用

前言

上一篇已经部署了fastdfs文件系统了,现在就要调用API来操作上传,下载,删除。本篇记录一下java调用api实现以上操作。

编译

上一篇就已经下载了fastdfs-client-java-master,解压可以看到目录结构,有一个pom.xml文件,这是一个maven项目,打开Eclipse,以Maven项目形式导入。
FastDFS的API使用_第1张图片

刚导入项目可能会出错,打开pom.xml看一下报错的位置,可能是由于本地没有找到当前项目需要的包,或存在该包但不同版本,这时可以根据本地拥有的包进行更改,或者执行maven install联网进行安装。
FastDFS的API使用_第2张图片

我根据我本地缓存的包和版本信息进行了修改,怎么查看缓存,先要看你把maven库配置到哪,默认是在“我的文档”。
FastDFS的API使用_第3张图片

FastDFS的API使用_第4张图片

修改完以后再执行Maven install(如果在pom.xml依赖库中的存在本地找不到相应版本的包则从网络下载到本地,再将你打好的jar包安装到你的本地库中),提示如下错误,大概意思是说,maven需要jdk环境而不是jre环境。
FastDFS的API使用_第5张图片

在eclipse的菜单中,进入 Window > Preferences > Java > Installed JREs > Execution Environments。找到你的Jdk路径导入。
FastDFS的API使用_第6张图片

再执行Maven install,可以看到执行成功。
FastDFS的API使用_第7张图片

可以看到在该目录下生成了fastdfs-client-java-1.25.jar包,这样就可以利用它来执行响应的API。
FastDFS的API使用_第8张图片

调用API

在调用api之前先写一个配置文件fdfs_client.conf,这个配置文件的功能其实跟FastDFS提供测试的client.conf很像,主要是关于一些track的ip之类。

connect_timeout = 30                    #连接tracker服务器超时时长
network_timeout = 60                    #socket连接超时时长
charset = UTF-8                         #编码
http.tracker_http_port = 8090           #端口
http.anti_steal_token = no              #防盗链
http.secret_key = FastDFS1234567890     #密钥
tracker_server = 172.16.0.245:22122     #可以配置多个

上传成功,打印组名和文件名
FastDFS的API使用_第9张图片

FastDFS的API使用_第10张图片

代码网上搜一下很多,能实现功能:,上传、下载、删除。具体效果自行测试。

public class FastDFS {
    public String conf_filename = "E:\\list\\fdfs_client.conf"; 
    private String group_name = "group1";
    private String remote_filename = "M00/00/00/rBAA9VjHEqCABFTDAAAO9LBgdjk566.jpg";
    @Test
    public void upload(){
        try {// 初始化全局配置。加载一个配置文件。
            ClientGlobal.init(conf_filename);
            // 创建一个TrackerClient对象。
            TrackerClient trackerClient = new TrackerClient();
            // 创建一个TrackerServer对象。
            TrackerServer trackerServer = trackerClient.getConnection();
            // 声明一个StorageServer对象,null。
            StorageServer storageServer = null;
            // 获得StorageClient对象。
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            // 直接调用StorageClient对象方法上传文件即可。
            String[] strings;
            strings = storageClient.upload_file("E:\\list\\2.jpg", "jpg", null);
            for (String string : strings) {
                System.out.println(string);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        } 
    }

    @Test
    public void download(){
        try {
            int errno;
            // 初始化全局配置。加载一个配置文件
            ClientGlobal.init(conf_filename);
            // 创建一个TrackerClient对象
            TrackerClient tracker = new TrackerClient();
            // 创建一个TrackerServer对象。
            TrackerServer trackerServer = tracker.getConnection();
            // 声明一个StorageServer对象,
            StorageServer storageServer = null;
            // 获得StorageClient对象
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
//          byte[] b = storageClient.download_file("group1", "M00/00/00/rBAG61i3wL6AUP98AAAO9LBgdjk220.jpg");
            errno = storageClient.download_file(group_name, remote_filename,
                    new DownloadFileWriter("E:\\list\\" + UUID.randomUUID().toString() + ".jpg"));
            if (errno == 0) {
                System.err.println("Download file success");
            } else {
                System.err.println("Download file fail, error no: " + errno);
            }
//          System.out.println(b);
            // 将下载的文件流保存
            // IOUtils.write(b, new
            // FileOutputStream("D:/"+UUID.randomUUID().toString()+".jpg"));
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }

    @Test
    public void testGetFileInfo() {

        try {

            ClientGlobal.init(conf_filename);

            TrackerClient tracker = new TrackerClient();

            TrackerServer trackerServer = tracker.getConnection();

            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            FileInfo fi = storageClient.get_file_info(group_name, remote_filename);

            System.out.println(fi.getSourceIpAddr()); // 172.16.6.235

            System.out.println(fi.getFileSize()); // 3828B

            System.out.println(fi.getCreateTimestamp()); // Thu Mar 02 14:50:38
                                                            // CST 2017

            System.out.println(fi.getCrc32()); // -1335855559

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

    @Test 
    public void testDelete(){ 

        try { 

            ClientGlobal.init(conf_filename);

            TrackerClient tracker = new TrackerClient(); 

            TrackerServer trackerServer = tracker.getConnection(); 

            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer); 

            int i = storageClient.delete_file(group_name, remote_filename); 

            System.out.println( i==0 ? "删除成功" : "删除失败:"+i); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }
}

我想说一下,下载这部分。网上一些是使用apache的IOUtil类来做文件输出,这需要导入包,如果没有则要自己下载,我偷懒了一下,想直接写个输出流导出就好了,但去源码中看了一下测试类,发现已经有实现好的方法,那就直接拿来用吧。

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtil;

FastDFS的API使用_第11张图片

如下,都是写好的测试类,包括上传、下载、删除、获取文件信息等,而且单单一个 storageClient.upload_file()上传方法就有多个参数,其他功能也是有多个参数的,可以根据自己需要,调用不同方法。
FastDFS的API使用_第12张图片)

小结

本篇主要是记录一下通过调用api来实现文件的上传、下载、删除功能,看上去相对简单,只是为了验证功能,实际开发的时候建议封装一下,网上也有很多,根据实际要求参考大神们的封装。

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