报错:
com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can’t create connection to/192.168.152.128:0
很明显,他认为我storage的port是0,应该是23000才对。打断点,发现是
com.github.tobato.fastdfs.domain.proto.mapper.FdfsParamMapper将byte[]转为值的时候出的问题,IP的位数在最新版应该为46-1,在StorageNode中ip的max设置成了16-1,因此修改方法有两个:
1、自己修改源码后mvn install
- clone一下源码
- 修改com.github.tobato.fastdfs.domain.proto.OtherConstants的FDFS_IPADDR_SIZE为46
- mvn clean install
2、反射动态修改
修改值的代码如下:
public static final int NEW_FDFS_IPADDR_SIZE = 46;
@PostConstruct
public void changePortSize() throws Exception {
Class<?> storageNodeClass = Class.forName("com.github.tobato.fastdfs.domain.fdfs.StorageNode"); // 替换为实际的类路径
Field ipField = storageNodeClass.getDeclaredField("ip");
FdfsColumn fdfsColumnAnnotation = ipField.getAnnotation(FdfsColumn.class);
InvocationHandler handler = Proxy.getInvocationHandler(fdfsColumnAnnotation);
Field values = handler.getClass().getDeclaredField("memberValues");
values.setAccessible(true);
Map<String, Object> memberValues =(Map<String, Object>) values.get(handler);
memberValues.put("max", NEW_FDFS_IPADDR_SIZE - 1);
}
我此处将代码放到了FdfsConfig的@Configuration类中,你也可以直接放启动springboot的main函数里,或者static {}里,反正让这段代码执行就行了