springboot 2.1 practical tutorial (21)-integration of FastDFS

Integration steps:

  • Create SpringBoot project
    Insert picture description here

  • Introduce fastdfs-client-java package

<dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.28</version>
 </dependency>
  • Create a new fdfs_client.conf file in the resources directory
tracker_server = 192.168.1.107:22122
  • Write the FastDFS tool class FastdfsClientUtil.java to encapsulate methods such as uploading, downloading, and deleting files.
package org.learn.utils;

import org.csource.fastdfs.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * FastDFS上传工具类
 */
@Component
public class FastdfsClientUtil {
    
    
    private static final Logger logger = LoggerFactory
            .getLogger(FastdfsClientUtil.class);

    private static final String CONFIG_FILENAME = "fdfs_client.conf";

    // 加载文件
    static {
    
    
        try {
    
    
            ClientGlobal.init(CONFIG_FILENAME);
            logger.info("初始化 Fastdfs Client 配置信息:{}", ClientGlobal.configInfo());

        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
        }
    }

    /**
     * 上传文件
     * @param fileContent
     * @param extName
     * @return
     * @throws Exception
     */
    public String[] uploadFile(byte[] fileContent, String extName) {
    
    

        try {
    
    
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            return storageClient.upload_file(fileContent, extName, null);

        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
            return null;
        }

    }

    /**
     * 下载文件
     * @param groupName
     * @param fileId
     * @return
     */
    public byte[] downloadFile(String groupName, String fileId) {
    
    
        try {
    
    
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            byte[] fileByte = storageClient.download_file(groupName, fileId);
            return fileByte;
        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
            return null;
        }
    }


    /**
     * 删除文件
     * @param groupName
     * @param remoteFilename
     * @return
     */
    public int deleteFile(String groupName, String remoteFilename) {
    
    

        try {
    
    
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            int i = storageClient.delete_file(groupName, remoteFilename);
            logger.info("delete file successfully!!!" + i);
            return 1;
        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
            return 0;
        }

    }
}

  • Write the Controller class FdfsClientController.java to handle FastDFS upload and download functions.
package org.learn.controller;

import org.learn.utils.FastdfsClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

/**
 * FastDFS上传文件控制器
 */
@Controller
public class FdfsClientController {
    
    

    private static Logger logger = LoggerFactory.getLogger(FdfsClientController.class);
    @Autowired
    private FastdfsClientUtil fastdfsClientUtil;


    /**
     * 上传文件
     *
     * @param file
     * @return
     */
    @RequestMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile file, Model view) {
    
    
        try {
    
    
            // 获取原文件名
            String origFileName = file.getOriginalFilename();
            logger.info("原始文件名:{}", origFileName);

            // 获取扩展名
            String extName = origFileName.substring(origFileName.lastIndexOf(".") + 1);
            logger.info("原始文件扩展名:{}", extName);

            // 获取文件存储路径
            String[] uriArray = new String[0];

            uriArray = fastdfsClientUtil.uploadFile(file.getBytes(), extName);

            String groupName = uriArray[0];
            String fileId = uriArray[1];

            String uri = groupName + "/" + fileId;
            logger.info("返回的文件存储路径:{}", uri);
            view.addAttribute("uri", uri);


            return "index";
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 下载文件
     *
     * @param filePath
     * @param response
     * @return
     */
    @RequestMapping("/downloadFile")
    public void downloadFile(@RequestParam("filePath") String filePath, HttpServletResponse response) {
    
    

        try {
    
    


            String group = filePath.substring(0, filePath.indexOf("/"));
            String path = filePath.substring(filePath.indexOf("/") + 1);
            int index = filePath.lastIndexOf("/");
            String fileName = filePath.substring(index + 1);
            //group1/M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
            /**
             * 参数格式:
             * groupName: group1
             * fileId: M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
             */
            byte[] fileByte = fastdfsClientUtil.downloadFile(group, path);
            InputStream inputStream = new ByteArrayInputStream(fileByte);
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + 		                               URLEncoder.encode(fileName, "UTF-8"));
            byte[] buff = new byte[1024];
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            OutputStream os = response.getOutputStream();
            int i = bis.read(buff);
            while (i != -1) {
    
    
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
            os.close();
            bis.close();
            logger.info("Download  successfully!");
        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
        }

    }


    /**
     * 删除文件
     *
     * @param filePath
     * @return
     */
    @RequestMapping("/deleteFile")
    @ResponseBody
    public String deleteFile(@RequestParam("filePath") String filePath) {
    
    
        try {
    
    
            /**
             * 参数格式:
             * groupName: group1
             * fileId:M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
             */
            String group = filePath.substring(0, filePath.indexOf("/"));
            String path = filePath.substring(filePath.indexOf("/") + 1);

            int i = fastdfsClientUtil.deleteFile(group, path);
            return (i > 0) ? "删除文件成功" : "删除文件失败";
        } catch (Exception e) {
    
    
            logger.error(e.toString(), e);
            return null;
        }

    }

}

  • Write the upload page index.html, upload a file, and download the file.
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
hello,你已经进入到首页
<form action="/uploadFile" enctype="multipart/form-data" method="post">
    文件上传<input type="file" name="file" id="file"/>

    <input type="submit" value="提交">

</form>
</body>
</html>
  • Test whether FastDFS integration is successful

    Test upload image

    Select the uploaded file and submit
    Insert picture description here

After submission, the image is uploaded successfully, and the upload path is returned
Insert picture description here

Download the picture, execute the download method, and pass the path address of the picture as the transmission to the download method

http://localhost:8080/downloadFile?filePath=group1/M00/00/00/wKgBa18mfs2ABii9AAW8VIh03qE824.png

Delete the picture, execute the delete method, and pass the path address of the picture as a parameter to the delete method
Insert picture description here

Please download the specific test code in my code cloud project

Address: source download address

Guess you like

Origin blog.csdn.net/java_cxrs/article/details/107747526