【FastDFS】在Linux下安装FastDFS以及Nginx配置、SpringBoot整合FastDFS、SpringCloud整合FastDFS分布式文件管理系统

解压文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • fdfs_trackerd是trackerd启动脚本
  • fdfs_storaged是storaged启动脚本

在etc/fdfs/目录下,可以看到默认的配置文件模板
在这里插入图片描述

配置并启动trackerd

FastDFS的tracker和storage在刚刚./make.sh install就安装了。这两种角色的安装方式是一样的。不同的是,两种需要不同的配置文件。
我们要启动tracker,就修改上面的默认配置模板,并且启动fdfs_trackerd脚本就可以

cp /etc/fdfs/tracker.conf.sample  /etc/fdfs/tracker.conf

也就是上面的
在这里插入图片描述

修改复制后的配置文件:

 vim  /etc/fdfs/tracker.conf
 #存储日志和数据的根目录
 base_path=/opt/fdfs_trackerd
 #查看防火墙状态
 service iptables status
 #关闭防火墙
 chkconfig iptables off

在这里插入图片描述

启动fdfs_trackerd脚本:

/etc/init.d/fdfs_trackerd start
#不过在安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式
service fdfs_trackerd start
#检查FastFDS Tracker Server是否启动成功
ps -ef|grep fdfs_trackerd
#设置tracker服务开机启动
chkconfig fdfs_trackerd on

在这里插入图片描述

配置并启动storaged

cp /etc/fdfs/storaged.conf.sample  /etc/fdfs/storaged.conf

修改复制后的配置文件:

 vim  /etc/fdfs/storaged.conf
 #存储日志和数据的根目录
 base_path=/opt/fdfs_storage
 #第一个存储目录
 store_path0=/opt/fastdfs_storage_data
 #
 tracker_server=106.15.249.213:22122
 #查看防火墙状态
 service iptables status
 #关闭防火墙
 chkconfig iptables off

启动fdfs_storaged脚本

/etc/init.d/fdfs_storaged start
#不过在安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式
service fdfs_storaged start
#检查FastFDS Tracker Server是否启动成功
ps -ef|grep fdfs_storaged
#设置tracker服务开机启动
chkconfig fdfs_storaged on

在这里插入图片描述

解压fastfds-nginx-module

修改vim config

%s替换字符串

:%s+/usr/local/+/usr/+g

在这里插入图片描述

配置ngnix与FastDFS关联配置文件

复制fastfds-nginx-module源码中的配置文件mod_fastdfs.conf到/etc/fdfs目录

cp /usr/local/fastfds/fastfds-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs

在这里插入图片描述
在这里插入图片描述

修改mod_fastdfs.conf

vim /etc/fdfs/mod_fastdfs.conf
#连接超时时间20s
connect_timeout=20
#tracker踪迹服务器的地址
tracker_server=106.1*.***.***:22122
#访问连接前缀加上组名
url_have_group_name = true
#文件存储路径
store_path0=/opt/fastdfs_storage_data
#保存退出
:wq

复制fastdfs-5.11的部分配置文件到/etc/fdfs目录

配置媒体类型

cd /usr/local/fastdfs/fastdfs-5.11/conf
cp http.conf mime.types /etc/fdfs/

在这里插入图片描述

在这里插入图片描述
配置图片访问路径的nginx

   server {
        listen       8081;
        server_name  localhost;

        location ~/group1/M00 {

			root /opt/fastdfs_storage_data/data;

			ngx_fastdfs_module;

		}

     }

关闭nginx

./nginx -s stop

在sbin目录下启动ngnix

./nginx

SpringBoot整合FastDFS

导入fastdfs-client依赖

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
        </dependency>

配置类@Import(FdfsClientConfig.class)

package com.leyou.config;

import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;

/**
 * @Title:
 * @author: Fly
 * @date: 2020/5/5 - 17:56
 */
@Configuration
@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
}

上传文件单元测试

注意test文件的根目录路径要和配置类一致
在这里插入图片描述

package com.leyou.config;

import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.domain.ThumbImageConfig;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import java.io.File;
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.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @Title:
 * @author: Fly
 * @date: 2020/5/5 - 18:04
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {
    @Autowired
    private FastFileStorageClient fastFileStorageClient;
    @Autowired
    private ThumbImageConfig thumbImageConfig;

    @Test
    public void testUpload() throws FileNotFoundException{
        //要上传的文件
        File file =new File("E:\\Java\\leyou\\image\\152.jpg");
        StorePath storePath = this.fastFileStorageClient.uploadFile(new FileInputStream(file), file.length(), "jpg", null);
        System.out.println(storePath.getFullPath());
        System.out.println(storePath.getPath());
    }

}

在这里插入图片描述
以上是访问tracker踪迹系统106.1*.***.***:22122上传
但是访问资源时,需要跟nginx配置的来访问:
在这里插入图片描述

修改业务层

package com.leyou.upload.service.impl;

import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.leyou.upload.service.UploadService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

/**
 * @Title:
 * @author: Fly
 * @date: 2020/5/4 - 13:06
 */
@Service
public class UploadServiceImpl implements UploadService {

    private static final List<String> CONTENT_TYPES= Arrays.asList("image/gif","image/jpeg");

    public static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class);

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    @Override
    public String uploadImage(MultipartFile file){
        //校验文件类型
        String originalFilename = file.getOriginalFilename();
//        StringUtils.substringAfterLast(originalFilename,".");
        String contentType = file.getContentType();
        if (!CONTENT_TYPES.contains(contentType)){
            LOGGER.info("文件类型不合法:{}",originalFilename);
            return null;
        }
        try {
            //校验文件内容
            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
            if (bufferedImage==null){
                LOGGER.info("文件内容不合法:{}",originalFilename);
                return  null;
            }

            //保存到服务器
            //将临时存储的文件移动到真实存储路径下
//            file.transferTo(new File("E:\\Java\\leyou\\image\\"+originalFilename));
            String substringAfterLast = StringUtils.substringAfterLast(originalFilename, ".");
            StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), substringAfterLast, null);


            //返回url
//            return "http://image.fly.com/"+originalFilename;
            return "http://106.**.***.***:8081/"+storePath.getFullPath();
        } catch (IOException e) {
            LOGGER.info("服务器内部错误:{}",originalFilename);
            e.printStackTrace();
        }
       return null;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值