一、开发环境
- MacBook Pro intel
- Docker Desktop
- Java Spring
二、Mac环境 Docker 的 FastDFS 安装
1. 拉取镜像
docker pull morunchang/fastdfs
2.启动镜像
# 192.168.31.253 = 你当前主机IP,自行配置
# tracker
docker run -d --name tracker -p 22122:22122 morunchang/fastdfs sh tracker.sh
# storage
docker run -d --name storage -p 8080:8080 -p 23000:23000 -e TRACKER_IP=192.168.31.253:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
3.tracker配置
#1.进入 tracker 环境
docker exec -it tracker /bin/bash
#2.tracker环境,修改配置文件
vim /etc/fdfs/storage.conf
#3.配置文件编辑模式,找到 tracker_server= 这一行,将IP地址改为你当前主机IP:22122,保存
tracker_server=192.168.31.253:22122
#4.tracker环境,执行命令获得容器内IP
fdfs_monitor /etc/fdfs/storage.conf
#如: Storage 1:
# id = 172.17.0.1
# ip_addr = 172.17.0.1 ACTIVE
#5.退出 tracker 环境
exit
#6.执行以下命令,IP为第四步获得的容器IP
sudo ifconfig lo0 alias 172.17.0.1
#7.重启 docker 的 tracker 环境
docker restart tracker
三、Java 中的使用
resources/fdfs_client.conf 配置信息
connect_timeout=60
network_timeout=60
charset=UTF-8
http.tracker_http_port=8080
tracker_server=192.168.31.253:22122
file/FastDFSFile 对象
private byte[] content; //文件内容
private String ext; //文件扩展名
private String md5; //文件摘要
private String author; //文件作者
// 构造方法、getter/setter 省略...
Spring 依赖环境
<!-- FastDFS客户端程序包 -->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
util/FastDFSUtil工具类方法
/***
* 初始化tracker信息
*/
static {
try {
//获取tracker的配置文件fdfs_client.conf的位置
String filePath = new ClassPathResource("fdfs_client.conf").getPath();
//加载tracker配置信息
ClientGlobal.init(filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
/****
* 文件上传
* @param file : 要上传的文件信息封装->FastDFSFile
* @return String[]
* 1:文件上传所存储的组名
* 2:文件存储路径
*/
public static String[] upload(FastDFSFile file) {
//获取文件作者
NameValuePair[] meta_list = new NameValuePair[1];
meta_list[0] = new NameValuePair(file.getAuthor());
/***
* 文件上传后的返回值
* uploadResults[0]:文件上传所存储的组名,例如:group1
* uploadResults[1]:文件存储路径,例如:M00/00/00/wKjThF0DBzaAP23MAAXz2mMp9oM26.jpeg
*/
String[] uploadResults = null;
try {
//获取TrackerServer
TrackerServer trackerServer = getTrackerServer();
//通过TrackerServer创建StorageClient
StorageClient storageClient = new StorageClient(trackerServer, null);
//执行文件上传
uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
} catch (Exception e) {
e.printStackTrace();
}
return uploadResults;
}
Java Spring 使用
@ApiOperation("文件上传")
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws Exception {
FastDFSFile fastDFSFile = new FastDFSFile(
file.getOriginalFilename(), //文件名字
file.getBytes(), //文件字节数组
StringUtils.getFilenameExtension(file.getOriginalFilename()) //文件扩展名
);
String[] upload = FastDFSUtil.upload(fastDFSFile);
return Arrays.toString(upload);
}
上传成功,响应结果
[group1, M00/00/00/rBEABGTyCP-AIm6JAA66vo-zR5I920.png]
访问地址,预览图片
http://localhost:8080/group1/M00/00/00/rBEABGTyCP-AIm6JAA66vo-zR5I920.png