在使用Java客户端调用FastDFS之前必须先搭建FastDFS服务器:
参考 服务器搭建流程博客连接:分布式文件存储服务(FastDFS)安装
服务器安装完毕后,咱们通过Java调用fastdfs
加载Maven依赖
fastdfs 没有在中心仓库中提供获取的依赖坐标。
只能自己通过源码方式编译,打好jar 包,安装到本地仓库。
官方仓库地址:
https://github.com/happyfish100/fastdfs-client-java
直接用idea 直接把这个源码作为模块导入工程
别的不用改,只把pom.xml中的版本改成1.27。
然后右边 执行install 就好了
安装好了 ,别的模块就可以直接使用这个坐标了。
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27</version>
而这个fastdfs-client-java模块可以从idea 中删除。
然后可以进行一下上传的测试
@RunWith(SpringRunner.class)
@SpringBootTest
@Test
public void textFileUpload() throws IOException, MyException {
String file = this.getClass().getResource("/tracker.conf").getFile();
ClientGlobal.init(file);
TrackerClient trackerClient=new TrackerClient();
TrackerServer trackerServer=trackerClient.getConnection();
StorageClient storageClient=new StorageClient(trackerServer,null);
String orginalFilename="e://victor.jpg";
String[] upload_file = storageClient.upload_file(orginalFilename, "jpg", null);
for (int i = 0; i < upload_file.length; i++) {
String s = upload_file[i];
System.out.println("s = " + s);
}
}
加入tracker.conf文件
tracker_server=192.168.67.162:22122
# 连接超时时间,针对socket套接字函数connect,默认为30秒
connect_timeout=30000
# 网络通讯超时时间,默认是60秒
network_timeout=60000
打印结果:
这个打印结果实际上就是我们访问的路径,加上服务器地址我们可以拼接成一个字符串
http://192.168.67.163/group1/M00/00/00/wKhDo1qjU2qAWKQmAAATla901AQ534.jpg
直接放到浏览器去访问
上传成功!
对接到业务模块中
在修改FileUploadController的方法
@Value("${fileServer.url}")
String fileUrl;
@RequestMapping(value = "fileUpload",method = RequestMethod.POST)
public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException, MyException {
String imgUrl=fileUrl;
if(file!=null){
System.out.println("multipartFile = " + file.getName()+"|"+file.getSize());
String configFile = this.getClass().getResource("/tracker.conf").getFile();
ClientGlobal.init(configFile);
TrackerClient trackerClient=new TrackerClient();
TrackerServer trackerServer=trackerClient.getConnection();
StorageClient storageClient=new StorageClient(trackerServer,null);
String filename= file.getOriginalFilename();
String extName = StringUtils.substringAfterLast(filename, ".");
String[] upload_file = storageClient.upload_file(file.getBytes(), extName, null);
imgUrl=fileUrl ;
for (int i = 0; i < upload_file.length; i++) {
String path = upload_file[i];
imgUrl+="/"+path;
}
}
return imgUrl;
}
利用@Value 标签可以引用application.properties中的值
fileServer.url=http://192.168.67.163
测试结果:
至此我们解决了文件上传的功能。