Java利用fastdfs-client-java开发工具包操作FastDFS分布式文件系统

来源:互联网 发布:linux下备份文件命令 编辑:程序博客网 时间:2024/06/05 18:04

1.下载fastdfs-client-java开发工具包

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


2.把fastdfs-client-java开发工具包打包到本地的Maven仓库,在Windows窗口输入如下命令(注意:本机必须安装Maven,并配置Maven环境变量,并且盘符要切换到fastdfs-client-java解压的目录下)

mvn clean install


当上述操作完成时,我们会看到Maven本地仓库有了fastdfs-client-java-1.27-SNAPSHOT.jar。
此时我们就可以在我们需要的项目中添加对它的依赖,就可以使用fastdfs-client-java此开发工具包。
FastDFS有两个角色:跟踪服务器和存储服务器。跟踪服务器负责文件访问的调度和负载均衡,存储文件服务器负责文件的存储、文件同步、提供文件访问接口,管理元数据(文件相关属性,键值对方式),例如:width = 1024,键为“width”,值为“1024”。

3.Java连接FastDFS分布式文件系统,遇到的那些坑......

(1)当出现此异常时:java.net.ConnectException: Connection refused: connect。请检查FastDFS分布式文件系统所需的tracker server服务、storage server服务是否启动,如果都启动了,还是出现此异常,那么请检查tracker.conf、storage.conf是否配置正确。
如果配置正确,还是出现异常,那么请检查Linux防火墙是否拦截了FastDFS相应的端口号,相应配置如下:
<1>tracker.conf配置文件修改如下:

如果bind_addr的值不填,则绑定所有主机。填,则填入你装FastDFS分布式文件系统的主机IP地址。
在这个配置文件中,我们也可以看到FastDFS分布式文件系统中的跟踪服务器的默认端口为22122。

<2>storage.conf配置文件修改如下:

当然上图,我们只需要改bind_addr的值即可,当然你也可以不改(bind_addr的值不填,则绑定所有主机),在这里我们也可以看到存储服务器的默认端口号为23000。在这里需要注意的是我们group_name的值,我们在用Java客户端上传文件时,如果不指定group_name的值,那么它就是默认值group1,如果指定了此值,但指定的值与默认值不一致,那么将出现如下异常:
org.csource.common.MyException: getStoreStorage fail, errno code: 2at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1629)at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:639)at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:197)at xin.soar.example.FastDFSUtil.upload_file(FastDFSUtil.java:59)at xin.soar.example.TestFastDFSUtil.upload_file(TestFastDFSUtil.java:39)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
其他有关于FastDFS的配置信息请看此说明:http://bbs.chinaunix.net/thread-1941456-1-1.html
那么此时我们就去看看Linux防火墙是否对这两个的端口是否开放,输入如下命令:
vim /etc/sysconfig/iptables

大家可以去看你的配置文件是否开放了其端口,如果没开,那么请输入如下命令:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
保存退出,如果上述你都做了,请一定要记得重启Linux防火墙,输入如下命令:
/etc/init.d/iptables restart  
然后再分别重启追踪服务器、存储服务器,输入如下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
最后再用我们写好的Java代码,来连接FastDFS,进行文件上传,下载,删除等操作。

当我们看见以上信息时,那么说明恭喜你,文件上传成功!