zoukankan      html  css  js  c++  java
  • fastDFS 上传 java源码

    要想搭建fastDFS网上有相近的文章:

     分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    首先下载fastdfs-client-java  jar包,我是下载fastdfs-client-java源码,自己打的jar包,fastdfs-client-java源码

    首先创建java项目

    创建fdfs_client.conf文件

    connect_timeout = 2
    
    network_timeout = 30
    
    charset = UTF-8
    
    http.tracker_http_port = 80
    http.anti_steal_token = no
    
    http.secret_key = FastDFS1234567890
    
    tracker_server = 192.168.206.139:22122  #对应自己的tracker服务IP地址

    这里只测试了上传一张图片,然后下载这张图片

    具体java代码:

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.UUID;
    
    import org.apache.commons.io.IOUtils;
    import org.csource.common.MyException;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.StorageClient;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    import org.junit.Test;
    
    
    public class FastDFS {
    
        @Test
        public void upload(){
            try {// 初始化全局配置。加载一个配置文件。
                ClientGlobal.init("D:\workspace-12306\Test\src\test\resources\fdfs_client.conf");
                // 创建一个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("D:\1.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 {
                 // 初始化全局配置。加载一个配置文件
                ClientGlobal.init("D:\workspace-12306\Test\src\test\resources\fdfs_client.conf");
                // 创建一个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/wKjOi1gi0nOAcSo8AAA63pKOZZ0312.jpg"); 
                System.out.println(b); 
                // 将下载的文件流保存
                IOUtils.write(b, new FileOutputStream("D:/"+UUID.randomUUID().toString()+".jpg"));
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        }
    }

    在开始测试时遇到一个异常:

    connect to server 192.168.206.139:22122 fail
    java.net.SocketTimeoutException: connect timed out
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:47)
        at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:72)
        at org.csource.fastdfs.TrackerClient.getConnection(TrackerClient.java:58)
        at FastDFS.upload(FastDFS.java:26)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        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:675)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
    connect to server 192.168.206.139:22122 fail
    java.net.SocketTimeoutException: connect timed out
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:47)
        at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:72)
        at org.csource.fastdfs.TrackerClient.getConnection(TrackerClient.java:58)
        at org.csource.fastdfs.TrackerClient.getStoreStorage(TrackerClient.java:91)
        at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1938)
        at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:703)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:164)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:132)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:114)
        at FastDFS.upload(FastDFS.java:33)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        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:675)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
    org.csource.common.MyException: getStoreStorage fail, errno code: 0
        at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1941)
        at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:703)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:164)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:132)
        at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:114)
        at FastDFS.upload(FastDFS.java:33)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        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:675)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
    View Code

    连接超时问题,这是由于linux没有开放22122端口和23000端口所致,我们可以关闭linux的防火墙iptables,但是不推荐这样做,会有安全问题,建议将这两个端口添加到防火墙开放端口中:

    #关闭防火墙命令
    service iptables stop
    #将22111和23000端口添加到防火墙中
    /sbin/iptables -I INPUT -p tcp --dport 22122 -j ACCEPT
    /sbin/iptables -I INPUT -p tcp --dport 23000 -j ACCEPT
    
    #保存iptables
    /etc/rc.d/init.d/iptables save
    
    #重启iptables
    service iptables restart

    配置完iptables,再测试上传就会成功,打印出上传信息:

    可以将打印的上传信息在浏览器中查看是否上传成功:

    在浏览器中能够正常显示,说明长传成功。

    在D盘能够找到保存的图片,说明下载成功。

  • 相关阅读:
    前端异常上报
    前端异常解析:Source Map
    前端操作剪切板不完全指北
    多系统之间模块相互引用的引发的深思
    浅谈vue原理(四)
    浅谈vue原理(三)
    浅谈vue原理(二)
    浅谈vue原理(一)
    vue中路由嵌套的作用
    常用的学习网站和小工具
  • 原文地址:https://www.cnblogs.com/qixing/p/6047372.html
Copyright © 2011-2022 走看看