JAVA后端自学技能实操
- 内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习
- FastDFS
- 使用docker安装FastDFS(linux)
- 集成到springboot项目中
内容将会持续更新中,有需要添加什么内容可以再评论区留言,大家一起学习
FastDFS
组名:文件上传后所在的 storage 组名称,在文件上传成功后有storage 服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了
store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储
服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
使用docker安装FastDFS(linux)
#拉取镜像
docker pull morunchang/fastdfs
#运行tracker(负载均衡和调度)
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
#运行storage(作用是文件存储,称之为存储服务器)下面的***.***.***.***为你的公网地址(fastDFS服务器)
docker run -d --name storage --net=host -e TRACKER_IP=***.***.***.***:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
# 进入到storage容器内部
docker exec -it storage /bin/bash
#1 通过命令来查询Nginx的安装位置
root@*******************:/# whereis nginx
#2 查看当前Nginx的进程
root@*******************:/# ps aux | grep nginx
添加以下内容
#3 修改Nginx的配置文件vi /etc/nginx/conf/nginx.conf#4 修改Nginx配置内容server {listen 80;server_name localhost; location ~ /M00 {# storage 实际存储图片的位置root /data/fast_data/data;ngx_fastdfs_module;}
}#5 进入到Nginx sbin目录从新加载Nginx配置文件
cd /etc/nginx/sbin
# 重新加载配置文件(切记一定需要重新加载一下配置)
./nginx -s reload
storage存储的位置/data/fast_data/data
#设置开机启动容器
docker update --restart=always tracker
docker update --restart=always storage
集成到springboot项目中
1.加坐标
<!--fastdfs-->
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId>
</dependency>
2.加配置文件
fast_dfs.properties
#socket连接超时时长
fdfs.soTimeout=1500
#连接tracker服务器超时时长
fdfs.connectTimeout=600
fdfs.trackerList=***.***.***.***:22122
3.书写配置类
@Configuration
@Import(FdfsClientConfig.class) // 导入FastDFS-Client组件
@PropertySource("fast_dfs.properties")
public class FdfsConfiguration {
}
4.书写配置类工具类
@Component
public class FastDFSClient {@Autowiredprivate FastFileStorageClient storageClient;public String uploadFile(MultipartFile file) throws IOException {StorePath storePath = storageClient.uploadFile((InputStream) file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);return storePath.getFullPath();}public void delFile(String filePath) {storageClient.deleteFile(filePath);}/*** 下载* @param groupName* @param path* @return*/public byte[] download(String groupName, String path) throws IOException {InputStream ins = storageClient.downloadFile(groupName, path, new DownloadCallback<InputStream>() {@Overridepublic InputStream recv(InputStream ins) throws IOException {// 将此ins返回给上面的insreturn ins;}});ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] buff = new byte[100];int rc = 0;while ((rc = ins.read(buff, 0, 100)) > 0) {byteArrayOutputStream.write(buff, 0, rc);}return byteArrayOutputStream.toByteArray();}
}
再需要的项目里面引入fastdfs,写一个配置
@Configuration
@ComponentScan("com.***.***.fastdfs")
public class FastDfsConfiguration {
}
修改application.yml文件,添加自定义的图片访问ip
#图片访问ip
fdfs.url: http://***.***.***.***/