fastdfs两种java客户端的使用及踩坑

本文介绍了使用FastDFS的两种Java客户端——com.github.tobato和org.csource的方式,包括配置、代码示例以及遇到的网络端口限制问题。在实际应用中,由于网络策略限制5位数端口,需将FastDFS的tracker和storage端口改为小于此的数值以避免连接超时。同时,提供了针对这两种客户端的配置和测试代码。
摘要由CSDN通过智能技术生成

fastdfs两种java客户端的使用及踩坑

fastdfs两种java客户端的使用及踩坑

fastdfs官方给出了fastdfs-client-java,当然你可以直接将源码打成jar包上传到本地的maven仓库,如果你的maven clean install命令不是特别给力,一个劲报错,不嫌麻烦的话,可以直接在你的代码中引入源码(当然这种方式不是特别推荐),网上给出了几种客户端的使用,现在整理两种客户端的使用及出现的问题,供参考

基于com.github.tobato

你可以在maven中央仓库找到这个客户端的client,只需要在pom.xml中引入即可

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.27.2</version>
        </dependency>

这个客户端是给予配置的,需要在工程上建一个配置类,如下:

import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;

@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
    
}

然后在application.yml中配置必要的链接等信息:

fdfs:
  so-timeout: 15001 # 超时时间
  connect-timeout: 6001 # 连接超时时间
  pool:
    max-total: 200   # 连接池最大数量
    max-total-per-key: 50  # 单个tracker最大连接数
    max-wait-millis: 5000 # 连接耗尽最大等待时间 毫秒
  thumb-image: # 缩略图
    width: 60
    height: 60
  tracker-list: xxx.xx.xx.xx:2007

很简单地写个测试类:

    @Test
    public void testUpload() throws FileNotFoundException {
        // 要上传的文件
        File file = new File("C:\\Users\\baocz\\Desktop\\test2.jpg");
        // 上传并保存图片,参数:1-上传的文件流 2-文件的大小 3-文件的后缀 4-可以不管他
        StorePath storePath = this.storageClient.uploadFile(
                new FileInputStream(file), file.length(), "jpg", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
    }

然后就可以使用返回的结果拼装路径访问图片了:

group1
M00/00/00/Cu1uBmGknlWAcBg_AAUxV4b6EoA734.jpg

这个客户端使用还是挺简单的,我遇到的主要的问题是,一直报connect time out。就是连不上tracker,我原来以为是22122的端口没开,所以就在服务器上开了端口,但是还是不行。查了各种资料,试了几次还是不行,大家可以看到上面我给的tracker-list配置项,我把端口改成了2007,是不再使用原来的22122,就可以了,原来我们的网络对5位数的端口有限制,好坑。。。

基于源码的方式,即org.csource

像我上面说的,你可以直接把源码打成jar,上传到你本地的仓库,然后依赖上,你也可以直接把源码引入自己的代码中,如果允许这样做。为了测试我是直接把源码引入自己的代码中的,源码clone下来就成了。

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

其实,你会发现,这个client已经能够实现我们上传下载的需求了。如果引入自己的代码中,注意两个配置文件。
在这里插入图片描述
测试代码如下:

    public static void main(String[] args) throws IOException, MyException {
        //1.获取配置文件路径
        String configNmae = FastDFSTest.class.getResource("/fdfs/fdfs_client.conf").getPath();
        System.out.println(configNmae);
        //2.加载配置文件
        ClientGlobal.init(configNmae);
        // 3.创建一个TrackerClient对象
        TrackerClient trackerClient = new TrackerClient();
        // 4.通过TrackerClient对象获得TrackerServer对象
        //fastdfs新版本由connection更改为getTrackerServer方法
        TrackerServer trackerServer = trackerClient.getTrackerServer();
        // 5.创建StorageServer的引用,null就可以了
        StorageServer storageServer = null;
        // 6.创建一个StorageClient对象,其需要两个参数,一个是TrackerServer,一个是StorageServer
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 7.使用StorageClient对象上传文件(图片)
        // 参数1:文件名,参数名:扩展名,不能包含".",参数3:文件的元数据,保存文件的原始名、大小、尺寸等,如果没有可为null
        String[] strings = storageClient.upload_file("C:\\Users\\baocz\\Desktop\\test2.jpg", "jpg", null);
        for (String string : strings) {
            System.out.println(string);
        }
    }

我在测试中发现,只修改tracker的端口号还是会报xxx.xxx.xxx.xx:23000链接不上,当然这时候需要把storage的端口号也改小,这是因为,tracke会去连接storage决定文件存放的目录,所以如果你们的网络策略也是限制5位数的端口号,需要把tracker和storage的端口号都改小,然后执行下

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

前提是,你之前的安装测试都没有问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值