Springboot集成FastDFS查看文件是否存在

转载:https://blog.csdn.net/weixin_44044915/article/details/116199752

最近做的项目出现了一个bug(没考虑周全),Fastdfs把图片删掉之后,数据库中的数据还存在,导致扫描器执行删除程序时报错:错误结点2找到不该文件。

原因是Fastdfs删除图片用的是自带的路径判断方法,因为数据库中存在该条记录,所以url不为空。

即:!xxx.getFDFSFileUrl().isEmpty())

该语句不管删图片与否,一直为ture,于是调研Fastdfs是否有自带的判断文件是否存在的方法。

没有直接判断是否存在的方法,找到获取文件详情的方法,网上获取文件详情后判断是否的方法并行不通(Exsits不可行),研究了一下输出,发现判断是否为null行得通,具体代码如下:

pom依赖:
(记得Reload一下

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


实现方法: 

import org.csource.fastdfs.*;
 import java.io.IOException;
 import org.csource.common.MyException;
 
 public boolean testQueryFile(String fileUrl) throws IOException,MyException {

        StorePath storePath = StorePath.parseFromUrl(fileUrl);
        //fdfsConfig.getFdfsStorageHost()是fdst服务的IP地址,我写在了配置文件,所以直接获取。
        String trackerServers = fdfsConfig.getFdfsStorageHost()+":22122";
        ClientGlobal.initByTrackers(trackerServers);
        TrackerClient trackerClient = new TrackerClient();
        TrackerServer trackerServer = trackerClient.getConnection();
        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        //storePath.getGroup()组名,storePath.getPath()文件路径
        FileInfo fileInfo = storageClient.query_file_info(storePath.getGroup(), storePath.getPath());
        //如果文件存在,返回ture
        return fileInfo != null;
    }


调用:

 boolean fileExist =fdfsUtils.testQueryFile(image.getFDFSFileUrl());
 //路径不为空且文件存在再执行删除方法,删除方法自行百度
 if(!image.getFDFSFileUrl().isEmpty()&& fileExist){
 try{
     fdfsUtils.deleteFile(image.getFDFSFileUrl());
    }catch (Exception e){
     log.error(e);
    }
 }


 

猜你喜欢

转载自blog.csdn.net/qq_27384769/article/details/117731413