Docker 搭建FDFS,以及结合Springboot使用
下载docker镜像
docker pull season/fastdfs:1.2
创建三个文件夹
mkdir /usr/local/server/fastdfs/tracker/data
mkdir /usr/local/server/fastdfs/storage/data
mkdir /usr/local/server/fastdfs/storage/path
创建tracker容器
docker run -itd --name tracker \
-p 22122:22122 \
--restart=unless-stopped --net host \
-v /usr/local/server/fastdfs/tracker/data:/fastdfs/tracker/data \
season/fastdfs:1.2 tracker
创建storage 需要修改成你的tracker的 ip
docker run -id --name storage \
--restart=unless-stopped --net host \
-v /usr/local/server/fastdfs/storage/data:/fastdfs/store_path \
-e TRACKER_SERVER="IP:22122" \
season/fastdfs:1.2 storage
修改 tracker 的配置文件
cd /etc/fdfs/
vim client.config
tracker_server=你的IP:22122
创建nginx 容器 需要修改成你的tracker的 ip
docker run -id --name fastdfs_nginx \
--restart=unless-stopped \
-v /usr/local/server/fastdfs/storage/data/:/fastdfs/store_path \
-v /usr/local/server/fastdfs/nginx/nginx.conf:/etc/nginx/conf/nginx.conf \
-p 8888:80 \
-e TRACKER_SERVER=IP:22122 \
season/fastdfs:1.2 nginx
nginx 配置修改
docker exec -it nginx bash
cd /etc/nginx/conf/
vim nginx.conf
修改成
location / {
root fastdfs/store_path/data;
ngx_fastdfs_module;
}
进入tracker 容器测试
docker exec -it tracker bash
echo "hello world!">> a.txt
fdfs_upload_file /etc/fdfs/client.conf a.txt
返回 group1/M00/00/00/wKi6a2NobPKAU7qSAAAADFmwwCQ619.txt
浏览器访问
127.0.0.1:8888/group1/M00/00/00/wKi6a2NobPKAU7qSAAAADFmwwCQ619.txt
Springboot 使用,引入gav坐标
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.27.2</version>
</dependency>
修改application.properties配置文件
################### fastdfs config##########
fdfs.so-timeout=1501
fdfs.connect-timeout=601
fdfs.thumb-image.height=150
fdfs.thumb-image.width=150
fdfs.tracker-list=Tracker IP:22122
fdfs.web-server-url=http://Nginx IP:8888/
新建一个导入类
@Configuration
@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastDFSImport {
}
创建工具类
@Component
public class FdfsClientUtils {
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private FdfsWebServer fdfsWebServer;
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
return fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
}
/**
* * 上传文件
* * @param file 文件对象
* * @return 文件访问地址
* * @throws IOException
*
*/
public String uploadFile(File file) throws IOException {
FileInputStream inputStream = new FileInputStream(file);
StorePath storePath = storageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
return getResAccessUrl(storePath);
}
private String getResAccessUrl(StorePath storePath) {
return fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
}
/**
* 删除文件
*
* @param filePath 文件路径
*/
public void deleteFile(String filePath) {
if (StringUtils.isEmpty(filePath)) {
return;
}
try {
StorePath storePath = StorePath.parseFromUrl(filePath);
storageClient.deleteFile(storePath.getPath(), storePath.getPath());
} catch (Exception e) {
//to do
}
}
public byte[] downloadFile(String filePath) {
//方式一
StorePath storePath = StorePath.parseFromUrl(filePath);
//方式二
String group = filePath.substring(0, filePath.indexOf("/"));
String path = filePath.substring(filePath.indexOf("/") + 1);
DownloadByteArray downloadByteArray = new DownloadByteArray();
return storageClient.downloadFile(group, path, downloadByteArray);
}
}
分类:
SpringBoot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统