FastDFS
1.下载
-
1.libfastcommon安装包
https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
-
2.fastdfs安装包
https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
-
3.fastdfs-nginx-module安装包
https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
-
4.Nginx安装包
http://nginx.org/download/nginx-1.15.2.tar.gz
2.安装
-
1.安装gcc
yum install -y gcc-c++
-
2.安装libevent
yum install -y libevent
-
3.安装libfastcommon
解压后进入目录执行命令
编译
./make.sh
安装
./make.sh install
-
4.安装fastdfs
-
安装相关依赖库
yum install perl
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
-
安装fastdfs
解压后进入目录执行命令
编译
./make.sh
安装
./make.sh install
-
查看trackerd和storaged可执行脚本
[root@localhost fastdfs-5.11]# ll /etc/init.d/ |grep fdfs -rwxr-xr-x. 1 root root 961 12月 3 11:43 fdfs_storaged -rwxr-xr-x. 1 root root 963 12月 3 11:43 fdfs_trackerd
-
准备配置文件,默认在/etc/fdfs下
[root@localhost fdfs]# ll /etc/fdfs/ 总用量 24 -rw-r--r--. 1 root root 1461 12月 3 11:43 client.conf.sample -rw-r--r--. 1 root root 7927 12月 3 11:43 storage.conf.sample -rw-r--r--. 1 root root 105 12月 3 11:43 storage_ids.conf.sample -rw-r--r--. 1 root root 7389 12月 3 11:43 tracker.conf.sample
copy一份去掉后缀.sample cp client.conf.sample client.conf cp storage.conf.sample storage.conf cp storage_ids.conf.sample storage_ids.conf cp tracker.conf.sample tracker.conf
-
修改tracker和storage的存放数据和日志目录
mkdir -p /home/fastdfs/tracker mkdir -p /home/fastdfs/storage
-
配置和启动tracker
- 修改tracker.conf文件
vim /etc/fdfs/tracker.conf //修改文件下base_path文件的路径 base_path=/home/fastdfs/tracker
- 启动tracker
service fdfs_trackerd start
-
配置和启动storage
- 修改storage.conf文件
vim /etc/fdfs/storage.conf //修改文件下base_path文件的路径 base_path=/home/fastdfs/storage store_path0=/home/fastdfs/storage //设置tracker的IP地址和端口号 tracker_server=10.101.37.176:22122
- 启动storage
service fdfs_storaged start
-
测试fastdfs
- 修改client.conf文件
vim /etc/fdfs/client.conf base_path=/home/fastdfs/storage tracker_server=10.101.37.176:22122
- 测试
[root@localhost fastdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./logo.png //返回一个地址则说明成功 group1/M00/00/00/CmUlsF_IgQSAJfCAAADncgtO6QM915.png
-
-
5.安装fastdfs-nginx-module
- 安装
解压并进入src目录 vim config //修改一下内容 ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
- 拷贝mod_fastdfs.conf到/etc/fdfs
cp mod_fastdfs.conf /etc/fdfs
- 编辑/etc/fdfs/mod_fastdfs.conf文件
vim /etc/fdfs/mod_fastdfs.conf //修改一下内容 tracker_server=10.101.37.176:22122 url_have_group_name = true
- 将fastdfs目录下的http.conf,mime.types移到/etc/fdfs下
cd /usr/local/fastdfs/fastdfs-5.11/conf/ cp http.conf mime.types /etc/fdfs/
-
6.安装nginx
- 配置模块命令
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.20/src/
- 编译和安装
make & make install
- 修改nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf #修改以下内容 location ~/group([0-9]) { #root html; #index index.html index.htm; ngx_fastdfs_module; }
- 启动nginx
cd /usr/local/nginx/sbin ./nginx
3.使用docker搭建
- docker启动
docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=10.101.37.157 -e WEB_PORT=80 -v ${HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
- 测试上传
1.进入容器
docker exec -it fastdfs /bin/bash
2.创建文件
echo "hello FastDFS">index.html
3.测试文件上传
fdfs_test /etc/fdfs/client.conf upload index.html
4.springboot使用fastdfs上传文件
- 1.pom.xml文件引入
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.27.2</version>
</dependency>
-
2.application.yml配置fastdfs
fdfs: so-timeout: 2500 connect-timeout: 600 thumb-image: width: 100 height: 100 tracker-list: - 139.9.130.249:22122 upload: base-url: http://139.9.130.249/ allow-types: - image/jpeg - image/png - image/bmp - image/gif - audio/mpeg
-
3.config
@Component
@ConfigurationProperties(prefix = "upload")
@Data
public class UploadConfig {
private String baseUrl;
private List<String> allowTypes;
}
- 4.上传工具类
import java.io.IOException;
@Component
@EnableConfigurationProperties(UploadConfig.class)
public class UploadService {
private Log log = LogFactory.getLog(UploadService.class);
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private UploadConfig uploadConfig;
public String uploadImage(MultipartFile file) {
// 1、校验文件类型
String contentType = file.getContentType();
if (!uploadConfig.getAllowTypes().contains(contentType)) {
throw new RuntimeException("文件类型不支持");
}
try {
// 3、上传到FastDFS
// 3.1、获取扩展名
String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
// 3.2、上传
StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), extension, null);
// 返回路径
return uploadConfig.getBaseUrl() + storePath.getFullPath();
} catch (IOException e) {
log.error("【文件上传】上传文件失败!....{}", e);
throw new RuntimeException("【文件上传】上传文件失败!" + e.getMessage());
}
}
}
- 5.controller
@RestController
@RequestMapping("/upload")
public class UploadController {
@Autowired
UploadService uploadService;
@RequestMapping("uploadImage")
public String uploadImage(MultipartFile file){
// String s = uploadService.uploadImage(file);
return uploadService.uploadImage(file);
}
}
- 使用postman测试