linux下纯手动安装fastDFS/nginx,基于springboot实现fastDFS文件上传下载

第一部分linux下实现安装fastDFS以及nginx

安装所需的环境:

yum install perl pcre pcre-devel zlib zlib-devel openssl openssl-devel 

1.需要四个安装包:

fastdfs-5.11.tar.gz

nginx-1.15.2.tar.gz

fastdfs-nginx-module_v1.16.tar.gz

libfastcommon-1.0.35

2.安装创建目录上传所有安装包

mkdir -p /fileservice/fast

3.开始逐个安装配置

  3.1. libfastcommon-1.0.35的安装配置

    3.1.1 解压  tar zxvf  libfastcommon-1.0.35

    3.1.2 进入解压好的目录  cd  libfastcommon-1.0.35

    3.1.3 执行编译安装  ./make.sh   &&  ./make.sh install  

  3.2. fastdfs-5.11的安装配置

    3.2.1 解压  tar zxvf fastdfs-5.11.tar.gz

    3.2.2 进入解压好的目录  cd  fastdfs-5.11

    3.2.3 执行编译安装  ./make.sh   &&  ./make.sh install

    3.2.4 进入   cd /etc/fdfs/  复制配置 如下:      

        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

    3.2.5 修改tracker的存放数据和日志的目录
       mkdir -p  /home/fastdfs/tracker

    3.2.6 配置和启动tracker 
       cd /etc/fdfs/

    3.2.7 .修改文件

      vim tracker.conf

       修改 base_path=/home/fastdfs/tracker 存放数据和日志的目录


    3.2.8 配置storage 

       切换目录到  cd /etc/fdfs/

       修改文件 vim storage.conf     

       修改路径 base_path=/home/fastdfs/storage

       store存放文件的位置 store_path0=/home/fastdfs/storage

    3.2.9 创建文件 mkdir -p /home/fastdfs/storage

    3.2.10 运行storaged  service fdfs_storaged  start

    3.2.11 修改client.conf   vim client.conf     

        base_path=/home/fastdfs/storage
       tracker_server=192.168.43.209:22122

    3.2.12 模拟上传: /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /home/333.jpg  成功即ok

  3.3   fastdfs-nginx-module_v1.16的安装配置

    3.3.1 路径 cd /fileservice/fast

    3.3.2解压 tar zxvf fastdfs-nginx-module_v1.16.tar.gz

    3.3.3 切换目录  cd fastdfs-nginx-module/src

    3.3.4 修改 vim config   替换掉所有local:   %s/local///g

    3.3.5 拷贝文件  cp mod_fastdfs.conf  /etc/fdfs/

    3.3.6编辑拷贝的配置文件  vim /etc/fdfs/mod_fastdfs.conf

    3.3.7修改如下:

      store_path0=/home/fastdfs/storage

      tracker_server=192.168.43.209:22122

      url_have_group_name = trues

    3.3.8 进入 cd /fileservice/fast/fastdfs-5.11/conf  将俩个文件移入/etc/fdfs/目录:    cp http.conf mime.types /etc/fdfs/

  3.4  nginx的安装配置

    3.4.1 进入压缩包路径 cd /fileservice/fast

    3.4.2 解压   tar zxvf  nginx-1.15.2.tar.gz

    3.4.3 进入解压包:cd nginx-1.15.2

    3.4.4 加入模块命令配置: 

      ./configure --prefix=/opt/ngnix --sbin-path=/usr/bin/nginx --add-module=/fileservice/fast/fastdfs-nginx-module/src

    3.4.5 执行编译安装:make && make install

    3.4.6 修改nginx配置: cd /opt/ngnix/conf      vim nginx.conf

       配置如下:

        location ~/group([0-9]){
        # root html;
        #index index.html index.htm;
        ngx_fastdfs_module;}

    3.4.7 进入下列目录:cd /usr/bin  启动ngnix : ./nginx

至此linux下完美安装好了fastDFS以及nginx!!

第二部分 springboot下实现fastDFS文件上传下载

  1.1 pom

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- taobao fastdfs依赖 -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.5</version>
        </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>

  1.2 yml配置

server:
  port: 8080
fdfs:
  connect-timeout: 600
  so-timeout: 1500
  pool:
    jmx-enabled: false
  thumb-image:
     100
    height: 50
    #跟踪器地址TrackerList参数,支持多个,我这里只有一个,如果有多个在下方加- x.x.x.x:port
  trackerList: 192.xxx.xx.xxx:22122  #你linux下的地址
spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html

  1.3 工具类实现文件上传,下载,删除

@Component
public class FastDFSClientUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(FastDFSClientUtil.class);
    @Resource
    private FastFileStorageClient storageClient;

    /**
     * 上传文件
     *
     * @param multipartFile
     * @return
     */
    public String upload(MultipartFile multipartFile) throws IOException {
        String originalFilename = multipartFile.getOriginalFilename().substring(
                multipartFile.getOriginalFilename().lastIndexOf(".") + 1
        );
        StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
                multipartFile.getInputStream(),
                multipartFile.getSize(),
                originalFilename,
                null
        );
        return storePath.getFullPath();

    }
    /**
     * 删除文件
     */
    public void deleteFile(String fileUrl) {
        if (StringUtils.isEmpty(fileUrl)) {
            LOGGER.info("fileUrl == >>文件路径为空...");
            return;
        }
        try {
            StorePath storePath = StorePath.parseFromUrl(fileUrl);
            storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
        } catch (Exception e) {
            LOGGER.info(e.getMessage());
        }
    }

    /**
     * 下载文件
     */
    public byte[] downloadFile(String fileUrl){
        String group = fileUrl.substring(0, fileUrl.indexOf("/"));
        String path = fileUrl.substring(fileUrl.indexOf("/") + 1);
        DownloadByteArray downloadByteArray = new DownloadByteArray();
        byte[] bytes = this.storageClient.downloadFile(group, path, downloadByteArray);
        try {
            
            FileOutputStream fileOutputStream = new FileOutputStream("f:\111.jpg");
            fileOutputStream.write(bytes);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bytes;
    }

}

1.4 controller层

@Controller
public class FsatFDSController {
    @Autowired
    private FastDFSClientUtil clientUtil;

    /**
     * 文件下载
     * @param fileUrl
     * @return
     */
    @RequestMapping("/download")
    @ResponseBody
    public byte[] downloadFile(String fileUrl){
        return clientUtil.downloadFile("group1/M00/00/00/wKgr0V9ZkH6AIq_JAAAg2jn0LiI783.jpg");
    }


    /**
     * 文件上传
     * @param mf
     * @return
     */
    @RequestMapping("/upload")
    @ResponseBody
    public String upload(MultipartFile mf){
        try {
            String upload = clientUtil.upload(mf);
            return upload;
        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败";
        }
    }
    @RequestMapping("/page")
    public String page(){
        return "index";
    }

}

1.5 lindex页面:只有上传功能

<!DOCTYPE html>
<html lang="en"  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="mf">
    <input type="submit" value="上传">
</form>
</body>
</html>
原文地址:https://www.cnblogs.com/hyy9527/p/13644772.html