SpringBoot 整合 FastDFS

1. 创建SpringBoot 项目

2. 导入FastDFS Java客户端依赖

<!-- fastdfs -->
<dependency>
    <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>

3. 配置 FastDFS 

3.1 在 application.properties 文件中配置如下:

#fastdfs 配置
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=80
fastdfs.tracker_servers=192.168.31.225:22122
fastdfs.connection_pool.enabled=true
fastdfs.connection_pool.max_count_per_entry=500
fastdfs.connection_pool.max_idle_time=3600
fastdfs.connection_pool.max_wait_time_in_ms=1000
fastdfs.nginx.host=192.168.31.225

 3.2 创建FastDFS配置类

新建java文件 FastDFSConfig.java

@Configuration
public class FastDFSConfig {

    @Bean
    public StorageClient storageClient() {
        StorageClient storageClient = null;
        try {
            ClientGlobal.initByProperties("application.properties");
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            storageClient = new StorageClient(trackerServer, null);
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }
        return storageClient;
    }


}

4. 业务代码中使用

Service 层实现类

@Service
public class UploadServiceImpl implements UploadService {

    private static final Logger logger = LoggerFactory.getLogger(UploadServiceImpl.class);

    @Resource
    private StorageClient storageClient;

    @Value("${fastdfs.nginx.host}")
    private String serverAddr;

    @Override
    public String upload(MultipartFile file) {

        String oldName = file.getOriginalFilename();
        if (oldName != null && !"".equals(oldName)) {
            String ext = oldName.substring(oldName.lastIndexOf(".") + 1);
            try {
                String[] parts = storageClient.upload_file(file.getBytes(), ext, null);
                String path = parts != null ? parts[0] + "/" + parts[1] : null;
                return "http://" + serverAddr + "/" + path;
            } catch (IOException | MyException e) {
                logger.error("文件上传失败");
                e.printStackTrace();
            }

        }

        return null;
    }
}

Controller 层调用

@RestController
@RequestMapping("/fastdfs")
public class UploadController {

    @Resource
    private UploadService uploadService;

    @PostMapping("/upload")
    public String uploadFile(MultipartFile file) {
        System.out.println(">>>>>>>>> 开始上传文件 >>>>>>>>>>>");
        return uploadService.upload(file);
    }
}

5. postman 工具测试

 

返回结果就是上传到服务器的文件的访问地址,浏览器地址栏可以打开。

6. 封装工具类

/**
 *  FastDFS 文件服务工具类
 * @author: cs
 * @date: 2023-02-12 19:39:25
 * @since: 1.0
 */
@Component
public class FastDFSUtil {


    private static StorageClient1 storageClient1;

    public static final String FASTDFS_NGINX_HOST_SPREFIX = "http://";

    // 服务器地址(服务器的Nginx已经配置好了,不需要加端口)
    @Value("${fastdfs.nginx.host}")
    private String serverAddr;

    /**
     * 初始化FastDFS 配置
     */
    @PostConstruct
    public void init() {
        try {
            ClientGlobal.initByProperties("application.properties");
            // 获取trackerClient服务
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            storageClient1 = new StorageClient1(trackerServer, null);

        } catch (IOException | MyException e) {
            e.printStackTrace();
        }
    }
    
    
    /**
     * 上传文件
     * @param file 文件对象
     * @return  文件id
     */
    public String upload(MultipartFile file) {
        String oldName = file.getOriginalFilename();
        if (oldName != null && !"".equals(oldName)) {
            String ext = oldName.substring(oldName.lastIndexOf(".") + 1);
            try {
                return FASTDFS_NGINX_HOST_SPREFIX + serverAddr + "/" + storageClient1.upload_file1(file.getBytes(), ext, null);
            } catch (IOException | MyException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    
}

 使用时就不用再写 FastDFSConfig.java 配置类了,直接在类中使用 @Resource 注入即可。

@Resource
private FastDFSUtil fastDFSUtil;

7. 服务器中Nginx的配置

 在server 节点下配置以上内容。监听的端口是80,注意开防火墙。

/home/fastdfs/storage/data 是fastdfs 服务存储文件的位置

在安装Nginx 时不用额外安装类似 fastdfs-nginx-module 这个模块。直接在nginx.conf 中将fastdfs文件的存储路径配置一下即可。

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以为您提供一些关于如何将Spring BootFastDFS集成的一般步骤。以下是大致步骤: 1. 添加FastDFS客户端依赖 在您的Spring Boot项目的pom.xml文件中添加FastDFS客户端依赖,例如: ```xml <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.27.1</version> </dependency> ``` 2. 配置FastDFS客户端 在您的Spring Boot项目的application.properties或application.yml文件中添加FastDFS客户端的配置,例如: ```properties fdfs.trackerList=tracker_server1_ip:tracker_server1_port,tracker_server2_ip:tracker_server2_port ``` 3. 配置文件上传服务 创建一个文件上传服务类,例如: ```java @Service public class FileUploadService { @Autowired private FastFileStorageClient fastFileStorageClient; public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); return storePath.getFullPath(); } } ``` 4. 使用文件上传服务 在您的Spring Boot项目的控制器中使用文件上传服务,例如: ```java @RestController public class FileUploadController { @Autowired private FileUploadService fileUploadService; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { return fileUploadService.uploadFile(file); } } ``` 这是一个基本的Spring BootFastDFS集成的示例,您可以根据您的需求进行修改和定制。希望这可以帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值