SpringBoot2.x整合FastDFS
本篇博客学习SpringBoot 2.1.11.RELEASE整合FastDFS。
FastDFS作用
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了大容量存储和负载均衡的问题。
安装连接:
我们开始吧
新建一个springboot项目
pom文件
加入fastdfs-client-java包
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
</dependency>
注意:fastdfs-client-java包mvn库中没有编译包,需要自己下载编译到自己的mvn本地库中,官方地址:https://github.com/happyfish100/fastdfs-client-java
fdfs_client.conf
在resources文件夹下新建fdfs_client.conf,编写如下:
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 6666
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.31.100:22122
文件工具类
编写fastdfs初始化连接配置工具类
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.stereotype.Service;
import java.io.*;
@Service
public class FastDFSService {
FastDFSService() throws IOException, MyException {
ClientGlobal.init("fdfs_client.conf");
}
public String upload(byte[] bs, String stringbe) {
TrackerServer trackerServer = null;
StorageServer storageServer = null;
String fileIds = null;
try {
trackerServer = init();
StorageClient1 storageClient = new StorageClient1(trackerServer, storageServer);
fileIds = storageClient.upload_file1(bs, getFileExt(stringbe), null);
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
} finally {
close(storageServer, trackerServer);
}
return fileIds;
}
public byte[] download(String groupName) {
TrackerServer trackerServer = null;
StorageServer storageServer = null;
byte[] b = null;
try {
trackerServer = init();
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
b = storageClient1.download_file1(groupName);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(storageServer, trackerServer);
}
return b;
}
public FileInfo getFileInfo(String groupName) {
TrackerServer trackerServer = null;
StorageServer storageServer = null;
FileInfo fi = null;
try {
trackerServer = init();
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
fi = storageClient1.get_file_info1(groupName);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(storageServer, trackerServer);
}
return fi;
}
public NameValuePair[] getFileMate(String groupName) {
TrackerServer trackerServer = null;
StorageServer storageServer = null;
NameValuePair nvps[] = null;
try {
trackerServer = init();
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
nvps = storageClient1.get_metadata1(groupName);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(storageServer, trackerServer);
}
return nvps;
}
public int delete(String groupName) {
TrackerServer trackerServer = null;
StorageServer storageServer = null;
int i = 0;
try {
trackerServer = init();
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
i = storageClient1.delete_file1(groupName);
} catch (Exception e) {
e.printStackTrace();
} finally {
close(storageServer, trackerServer);
}
return i;
}
public byte[] File2byte(File file) {
byte[] buffer = null;
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
private TrackerServer init() {
TrackerServer trackerServer = null;
try {
TrackerClient tracker = new TrackerClient();
trackerServer = tracker.getConnection();
} catch (IOException e) {
e.printStackTrace();
}
return trackerServer;
}
private void close(StorageServer storageServer, TrackerServer trackerServer) {
try {
if (storageServer != null) {
storageServer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (trackerServer != null) {
trackerServer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private String getFileExt(String fileName) {
if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
return "";
} else {
return fileName.substring(fileName.lastIndexOf(".") + 1); // 不带最后的点
}
}
public String getFileName(String fileName) {
if (StringUtils.isBlank(fileName) || !fileName.contains("/")) {
return "";
} else {
return fileName.substring(fileName.lastIndexOf("/") + 1); // 不带最后的点
}
}
}
演示案例
编写测试类
import cn.cicoding.service.FastDFSService;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootFastdfsApplicationTests {
@Autowired
private FastDFSService fastDFSService;
@Test
public void contextLoads() throws IOException {
String local_filename = "C:\\Users\\Public\\Pictures\\Sample Pictures\\123.jpg";
File f=new File(local_filename);
String groupName= fastDFSService.upload(fastDFSService.File2byte(f),f.getName());
System.out.println(groupName);
IOUtils.write(fastDFSService.download(groupName), new FileOutputStream("D:/app/fastdfs/"+fastDFSService.getFileName(groupName)));
System.out.println(fastDFSService.getFileInfo(groupName));
System.out.println(fastDFSService.getFileMate(groupName));
System.out.println(fastDFSService.delete(groupName)==0 ? "删除成功" : "删除失败");
}
}
运行测试类得到结果:
group1/M00/00/00/wKgfZF3vl6WAJDW5AAvWFlS1kOw230.jpg
123
.jpg
删除成功
源码可以首页加群获取!