使用SpringBoot集成fdfs文件存储服务 - 实现对文件的上传下载删除功能

概述

FastDFS(Fast Distributed File System)是一个开源的分布式文件系统,它提供了高容量和高性能的文件存储解决方案。在Spring Boot中集成FastDFS可以通过客户端工具实现文件的上传、下载和删除操作。以下是一个简单的示例,演示了如何在Spring Boot项目中集成FastDFS客户端,并实现基本的文件操作。

1. 添加依赖

首先,在你的Spring Boot项目中添加FastDFS客户端的依赖。目前有多个FastDFS客户端实现,比如 fastdfs-client-java 或者 fdfs-client-java,你可以根据自己的喜好选择。

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

2. 配置FastDFS连接信息

application.propertiesapplication.yml中配置FastDFS的连接信息,包括Tracker服务器的地址和端口等信息。

# FastDFS配置
fdfs.tracker-list=tracker_server_address:tracker_server_port

3. 编写文件操作服务类

创建一个服务类,用于封装FastDFS客户端的操作,实现文件的上传、下载和删除功能。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import javax.annotation.Resource;
import java.io.IOException;

@Service
public class FastDFSService {

    @Resource
    private FastFileStorageClient storageClient;

    @Value("${fdfs.tracker-list}")
    private String trackerList;

    /**
     * 上传文件
     *
     * @param file 文件对象
     * @return 文件访问地址
     * @throws IOException
     */
    public String uploadFile(MultipartFile file) throws IOException {
        StorePath storePath = storageClient.uploadFile(
                file.getInputStream(),
                file.getSize(),
                getFileExtension(file.getOriginalFilename()),
                null);
        return getResAccessUrl(storePath);
    }

    /**
     * 删除文件
     *
     * @param fileUrl 文件访问地址,包括组名和文件路径信息
     * @throws IOException
     */
    public void deleteFile(String fileUrl) throws IOException {
        StorePath storePath = StorePath.praseFromUrl(fileUrl);
        storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
    }

    /**
     * 下载文件
     *
     * @param fileUrl 文件访问地址,包括组名和文件路径信息
     * @return 文件字节流
     * @throws IOException
     */
    public byte[] downloadFile(String fileUrl) throws IOException {
        StorePath storePath = StorePath.praseFromUrl(fileUrl);
        return storageClient.downloadFile(storePath.getGroup(), storePath.getPath(),
                inputStream -> {
                    try {
                        return StreamUtils.copyToByteArray(inputStream);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                });
    }

    /**
     * 获取文件后缀名
     *
     * @param filename 文件名
     * @return 后缀名
     */
    private String getFileExtension(String filename) {
        if (filename.contains(".")) {
            return filename.substring(filename.lastIndexOf(".") + 1);
        }
        return null;
    }

    /**
     * 获取文件访问地址
     *
     * @param storePath 存储路径对象
     * @return 文件访问地址
     */
    private String getResAccessUrl(StorePath storePath) {
        return "http://" + trackerList + "/" + storePath.getFullPath();
    }
}

4. 使用示例

在你的Controller中使用FastDFSService来进行文件上传、下载和删除操作。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FastDFSService fastDFSService;

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        return fastDFSService.uploadFile(file);
    }

    @DeleteMapping("/delete")
    public void deleteFile(@RequestParam("fileUrl") String fileUrl) throws IOException {
        fastDFSService.deleteFile(fileUrl);
    }

    @GetMapping("/download")
    public byte[] downloadFile(@RequestParam("fileUrl") String fileUrl) throws IOException {
        return fastDFSService.downloadFile(fileUrl);
    }
}

5. 注意事项

  • 确保FastDFS服务正常运行,并且Spring Boot应用能够连接到Tracker服务器。
  • fdfs.tracker-list需要正确配置为你的Tracker服务器地址和端口。
  • 在实际应用中,可能需要根据业务需求进行额外的错误处理和安全性增强。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值