服务器之家

服务器之家 > 正文

java fastdfs客户端使用实例代码

时间:2021-03-28 16:10     来源/作者:胡一生

本文研究的主要是java fastdfs客户端使用实例的相关内容,具体实现如下。

什么是fastdfs?

fastdfs是用c语言编写的一款开源的分布式文件系统。fastdfs为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用fastdfs很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

fastdfs架构

fastdfs架构包括 tracker server和storage server。客户端请求tracker server进行文件上传、下载,通过tracker server调度最终由storage server完成文件上传和下载。tracker server作用是负载均衡和调度,通过tracker server在文件上传时可以根据一些策略找到storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。storage server作用是文件存储,客户端上传的文件最终存储在storage服务器上,storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

java fastdfs客户端使用实例代码

实例

一、创建一个maven的webproject,叫

file-manager:mvnarchetype:create-dgroupid=platform.activity.filemanager-dartifactid=file-manager-darchetypeartifactid=maven-archetype-webapp

二、定义一个fastdfs的客户端文件fdfs_client.conf:

?
1
2
3
4
5
6
7
8
9
10
11
class="properties" name="code">connect_timeout = 2
network_timeout = 30
charset = utf-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = fastdfs1234567890
 
tracker_server = 192.168.1.156:22122
#tracker_server = 192.168.1.188:22122
 
#storage_server = 192.168.1.155:23000 #no need here

三、定义一个配置接口:

?
1
2
3
4
5
6
7
8
9
10
11
package com.chuanliu.platform.activity.fm.manager;
import java.io.serializable;
public interface filemanagerconfig extends serializable {
 public static final string file_default_width   = "120";
 public static final string file_default_height   = "120";
 public static final string file_default_author   = "diandi";
 public static final string protocol = "http://";
 public static final string separator = "/";
 public static final string tracker_ngnix_port   = "8080";
 public static final string client_config_file  = "fdfs_client.conf";
}

四、封装一个fastdfs文件bean

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.chuanliu.platform.activity.fm.manager;
public class fastdfsfile implements filemanagerconfig {
 private static final long serialversionuid = -996760121932438618l;
 private string name;
 private byte[] content;
 private string ext;
 private string height = file_default_height;
 private string width = file_default_width;
 private string author = file_default_author;
 public fastdfsfile(string name, byte[] content, string ext, string height,string width, string author) {
  super();
  this.name = name;
  this.content = content;
  this.ext = ext;
  this.height = height;
  this.width = width;
  this.author = author;
 }
 public fastdfsfile(string name, byte[] content, string ext) {
  super();
  this.name = name;
  this.content = content;
  this.ext = ext;
 }
 public byte[] getcontent() {
  return content;
 }
 public void setcontent(byte[] content) {
  this.content = content;
 }
 public string getext() {
  return ext;
 }
 public void setext(string ext) {
  this.ext = ext;
 }
 public string getheight() {
  return height;
 }
 public void setheight(string height) {
  this.height = height;
 }
 public string getwidth() {
  return width;
 }
 public void setwidth(string width) {
  this.width = width;
 }
 public string getauthor() {
  return author;
 }
 public void setauthor(string author) {
  this.author = author;
 }
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
}

五、定义核心的filemanager类,里面包含有上传、删除、获取文件的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.chuanliu.platform.activity.fm.manager;
import java.io.file;
import java.io.ioexception;
import org.apache.log4j.logger;
import org.csource.common.namevaluepair;
import org.csource.fastdfs.clientglobal;
import org.csource.fastdfs.fileinfo;
import org.csource.fastdfs.serverinfo;
import org.csource.fastdfs.storageclient;
import org.csource.fastdfs.storageserver;
import org.csource.fastdfs.trackerclient;
import org.csource.fastdfs.trackerserver;
import com.chuanliu.platform.activity.basic.util.loggerutils;
public class filemanager implements filemanagerconfig {
    private static final long serialversionuid = 1l;
    private static logger logger = logger.getlogger(filemanager.class);
    private static trackerclient trackerclient;
    private static trackerserver trackerserver;
    private static storageserver storageserver;
    private static storageclient storageclient;
    static {
        // initialize fast dfs client configurations
        try {
            string classpath = new file(filemanager.class.getresource("/").getfile()).getcanonicalpath();
            string fdfsclientconfigfilepath = classpath + file.separator + client_config_file;
            logger.info("fast dfs configuration file path:" + fdfsclientconfigfilepath);
            clientglobal.init(fdfsclientconfigfilepath);
            trackerclient = new trackerclient();
            trackerserver = trackerclient.getconnection();
            storageclient = new storageclient(trackerserver, storageserver);
        }
        catch (exception e) {
            loggerutils.error(logger, e);
        }
    }
    public static string upload(fastdfsfile file) {
        loggerutils.info(logger, "file name: " + file.getname() + "file length: " + file.getcontent().length);
        namevaluepair[] meta_list = new namevaluepair[3];
        meta_list[0] = new namevaluepair("width", "120");
        meta_list[1] = new namevaluepair("heigth", "120");
        meta_list[2] = new namevaluepair("author", "diandi");
        long starttime = system.currenttimemillis();
        string[] uploadresults = null;
        try {
            uploadresults = storageclient.upload_file(file.getcontent(), file.getext(), meta_list);
        }
        catch (ioexception e) {
            logger.error("io exception when uploadind the file: " + file.getname(), e);
        }
        catch (exception e) {
            logger.error("non io exception when uploadind the file: " + file.getname(), e);
        }
        logger.info("upload_file time used: " + (system.currenttimemillis() - starttime) + " ms");
        if (uploadresults == null) {
            loggerutils.error(logger, "upload file fail, error code: " + storageclient.geterrorcode());
        }
        string groupname     = uploadresults[0];
        string remotefilename  = uploadresults[1];
        string fileabsolutepath = protocol + trackerserver.getinetsocketaddress().gethostname()
            + separator
            + tracker_ngnix_port
            + separator
            + groupname
            + separator
            + remotefilename;
        loggerutils.info(logger, "upload file successfully!!! " +"group_name: " + groupname + ", remotefilename:"
            + " " + remotefilename);
        return fileabsolutepath;
    }
    public static fileinfo getfile(string groupname, string remotefilename) {
        try {
            return storageclient.get_file_info(groupname, remotefilename);
        }
        catch (ioexception e) {
            logger.error("io exception: get file from fast dfs failed", e);
        }
        catch (exception e) {
            logger.error("non io exception: get file from fast dfs failed", e);
        }
        return null;
    }
    public static void deletefile(string groupname, string remotefilename) throws exception {
        storageclient.delete_file(groupname, remotefilename);
    }
    public static storageserver[] getstorestorages(string groupname) throws ioexception {
        return trackerclient.getstorestorages(trackerserver, groupname);
    }
    public static serverinfo[] getfetchstorages(string groupname, string remotefilename) throws ioexception {
        return trackerclient.getfetchstorages(trackerserver, groupname, remotefilename);
    }
}

六、unit test测试类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package manager;
import java.io.file;
import java.io.fileinputstream;
import org.csource.fastdfs.fileinfo;
import org.csource.fastdfs.serverinfo;
import org.csource.fastdfs.storageserver;
import org.junit.test;
import org.springframework.util.assert;
import com.chuanliu.platform.activity.fm.manager.fastdfsfile;
import com.chuanliu.platform.activity.fm.manager.filemanager;
/**
 * @author josh wang(sheng)
 *
 * @email josh_wang23@hotmail.com
 */
public class testfilemanager {
    @test
     public void upload() throws exception {
        file content = new file("c:\\520.jpg");
        fileinputstream fis = new fileinputstream(content);
        byte[] file_buff = null;
        if (fis != null) {
            int len = fis.available();
            file_buff = new byte[len];
            fis.read(file_buff);
        }
        fastdfsfile file = new fastdfsfile("520", file_buff, "jpg");
        string fileabsolutepath = filemanager.upload(file);
        system.out.println(fileabsolutepath);
        fis.close();
    }
    @test
     public void getfile() throws exception {
        fileinfo file = filemanager.getfile("group1", "m00/00/00/wkgbm1n1-cianrlmaabygpyzdlw073.jpg");
        assert.notnull(file);
        string sourceipaddr = file.getsourceipaddr();
        long size = file.getfilesize();
        system.out.println("ip:" + sourceipaddr + ",size:" + size);
    }
    @test
     public void getstorageserver() throws exception {
        storageserver[] ss = filemanager.getstorestorages("group1");
        assert.notnull(ss);
        for (int k = 0; k < ss.length; k++){
            system.err.println(k + 1 + ". " + ss[k].getinetsocketaddress().getaddress().gethostaddress() + ":" + ss[k].getinetsocketaddress().getport());
        }
    }
    @test
     public void getfetchstorages() throws exception {
        serverinfo[] servers = filemanager.getfetchstorages("group1", "m00/00/00/wkgbm1n1-cianrlmaabygpyzdlw073.jpg");
        assert.notnull(servers);
        for (int k = 0; k < servers.length; k++) {
            system.err.println(k + 1 + ". " + servers[k].getipaddr() + ":" + servers[k].getport());
        }
    }
}

总结

以上就是本文关于java fastdfs客户端使用实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://www.cnblogs.com/go4mi/p/5809541.html

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部