springboot添加Fastdfs配置

1.构建springboot项目java

2.导入fastdfs依赖spring

<dependency>
    <groupId>net.arccode</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0</version>
</dependency>

3.application.properties 添加fastdfs文件服务器配置springboot

fastdfs.trackerServer=192.168.1.180:22122
fastdfs.connectTimeout=5000
fastdfs.networkTimeout=30000
fastdfs.trackerHttpPort=8080
fastdfs.server.ip=192.168.1.180

4.读取application.properties 文件的fastdfs配置信息服务器

/**
 * @Author: Dell
 * @Date: 2018/12/3
 * @Description:
 */
@Component
public class FastDFSConfig {
    private String DEFAULT_CHARSET="UTF-8";

    @Value(value = "${fastdfs.connectTimeout}")
    private Integer connectTimeout;

    @Value(value = "${fastdfs.networkTimeout}")
    private Integer networkTimeout;

    @Value(value = "${fastdfs.trackerHttpPort}")
    private Integer trackerHttpPort;

    @Value(value = "${fastdfs.trackerServer}")
    private String trackerServer;

    public FastDFSConfig() {
    }

    public Integer getConnectTimeout() {
        return connectTimeout;
    }

    public void setConnectTimeout(Integer connectTimeout) {
        this.connectTimeout = connectTimeout;
    }

    public Integer getNetworkTimeout() {
        return networkTimeout;
    }

    public void setNetworkTimeout(Integer networkTimeout) {
        this.networkTimeout = networkTimeout;
    }

    public Integer getTrackerHttpPort() {
        return trackerHttpPort;
    }

    public void setTrackerHttpPort(Integer trackerHttpPort) {
        this.trackerHttpPort = trackerHttpPort;
    }

    public String getTrackerServer() {
        return trackerServer;
    }

    public void setTrackerServer(String trackerServer) {
        this.trackerServer = trackerServer;
    }

    @Override
    public String toString() {
        return "FastDFSConfig{" +
                "connectTimeout=" + connectTimeout +
                ", networkTimeout=" + networkTimeout +
                ", trackerHttpPort=" + trackerHttpPort +
                ", trackerServer='" + trackerServer + '\'' +
                '}';
    }
}

5.配置fastdfds客户端app

/**
 * @Author: Dell
 * @Date: 2018/12/3
 * @Description:
 */
@Configuration
public class StorageClientConfig {
    private static final Logger logger = LoggerFactory.getLogger(StorageClientConfig.class);

    @Autowired
    private FastDFSConfig fastDFSConfig;

    @Bean
    public StorageClient storageClient() throws IOException, MyException {
        this.initClientGlobal();

        TrackerClient trackerClient = new TrackerClient();
        TrackerServer trackerServer = trackerClient.getConnection();
        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

        return new StorageClient(trackerServer, storageServer);
    }

    private void initClientGlobal() throws IOException, MyException {
        ClientGlobal.initByTrackers(fastDFSConfig.getTrackerServer());

        if(fastDFSConfig.getTrackerHttpPort()!=null && fastDFSConfig.getTrackerHttpPort().intValue()!=0) {
            ClientGlobal.setG_tracker_http_port(fastDFSConfig.getTrackerHttpPort());
        }

        if(fastDFSConfig.getConnectTimeout()!=null && fastDFSConfig.getConnectTimeout().intValue()!=0) {
            ClientGlobal.setG_connect_timeout(fastDFSConfig.getConnectTimeout());
        }
        if(fastDFSConfig.getNetworkTimeout()!=null && fastDFSConfig.getNetworkTimeout().intValue()!=0) {
            ClientGlobal.setG_network_timeout(fastDFSConfig.getNetworkTimeout());
        }
    }

}

6.文件属性Bean,存放上传文件属性ide

/**
 * @Author: Dell
 * @Date: 2018/11/15
 * @Description:
 */
public class FastDFSFileMeta {
    private String name;
    private byte[] content;
    private String ext;
    private String md5;
    private String author;
    private long fileSize;


    public FastDFSFileMeta() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }

    public String getExt() {
        return ext;
    }

    public void setExt(String ext) {
        this.ext = ext;
    }

    public String getMd5() {
        return md5;
    }

    public void setMd5(String md5) {
        this.md5 = md5;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public long getFileSize() {
        return fileSize;
    }

    public void setFileSize(long fileSize) {
        this.fileSize = fileSize;
    }

    @Override
    public String toString() {
        return "FastDFSFileMeta{" +
                "name='" + name + '\'' +
                ", content=" + Arrays.toString(content) +
                ", ext='" + ext + '\'' +
                ", md5='" + md5 + '\'' +
                ", author='" + author + '\'' +
                ", fileSize=" + fileSize +
                '}';
    }
}

7.文件属性构造器工具

/**
 * @Author: Dell
 * @Date: 2018/11/16
 * @Description:
 */
public class FastDFSFileMetaBuilder {

    /**
     * 根据上传附件构造FastDFSFileMeta
     * @param file
     * @return
     * @throws IOException
     */
    public static FastDFSFileMeta build(MultipartFile file) throws IOException {
        if(file == null) {
            return null;
        }

        FastDFSFileMeta meta = new FastDFSFileMeta();
        meta.setContent(file.getBytes());
        meta.setName(file.getOriginalFilename());
        meta.setExt(file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")+1));
        meta.setFileSize(file.getSize());

        return meta;
    }

    public static FastDFSFileMeta buildBigFile(MultipartFile file) {
        if(file == null) {
            return null;
        }

        FastDFSFileMeta meta = new FastDFSFileMeta();
        meta.setName(file.getOriginalFilename());
        meta.setExt(file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")+1));
        meta.setFileSize(file.getSize());

        return meta;
    }

    public static FastDFSFileMeta build(File file) throws IOException {
        if(file == null) {
            return null;
        }

        FastDFSFileMeta meta = new FastDFSFileMeta();
        meta.setName(file.getName());
        meta.setExt(file.getName().substring(file.getName().indexOf(".")+1));
        meta.setFileSize(file.length());

        InputStream in = null;
        try {
            in = new FileInputStream(file);
            byte[] bytes = new byte[in.available()];
            in.read(bytes);

            meta.setContent(bytes);
        } finally {
            if(in!=null) {
                in.close();
            }
        }

        return meta;
    }

    public static FastDFSFileMeta buildBigFile(File file) throws IOException {
        if(file == null) {
            return null;
        }

        FastDFSFileMeta meta = new FastDFSFileMeta();
        meta.setName(file.getName());
        meta.setExt(file.getName().substring(file.getName().indexOf(".")+1));
        meta.setFileSize(file.length());

        return meta;
    }
}

8.FastDFS 工具类ui

/**
 * FastDFS 工具类
 * @Author: Dell
 * @Date: 2018/12/3
 * @Description:
 */
@Component
public class FastDFSClient {
    private static final Logger logger = LoggerFactory.getLogger(FastDFSClient.class);

    @Autowired
    private StorageClient storageClient;

    public String[] upload(File file, FastDFSFileMeta meta) {
        logger.debug("文件上传[fileMeta={}]", meta);

        // 文件属性
        NameValuePair[] metas = new NameValuePair[1];
        metas[0] = new NameValuePair("author", meta.getAuthor());

        String[] results = null;
        try {
            results = storageClient.upload_file(file.getPath(), meta.getExt(), metas);

        } catch (IOException e) {
            logger.error("文件上传错误file={}", meta.getName(), e);
        } catch (Exception e) {
            logger.error("文件上传错误file={}", meta.getName(), e);
        }

        if (results==null || results.length!=2) {
            logger.error("文件上传错误[error code={}]", storageClient.getErrorCode());
            return null;
        }

        logger.debug("文件上传成功[group_name={}, remoteFileName={}]", results[0], results[1]);
        return results;
    }

    /**
     * 文件上传
     * @param meta
     * @return
     */
    public String[] upload(FastDFSFileMeta meta) {
        logger.debug("文件上传[fileMeta={}]", meta);

        // 文件属性
        NameValuePair[] metas = new NameValuePair[1];
        metas[0] = new NameValuePair("author", meta.getAuthor());

        String[] results = null;
        try {
            results = storageClient.upload_file(meta.getContent(), meta.getExt(), metas);

        } catch (IOException e) {
            logger.error("文件上传错误file={}", meta.getName(), e);
        } catch (Exception e) {
            logger.error("文件上传错误file={}", meta.getName(), e);
        }

        if (results==null || results.length!=2) {
            logger.error("文件上传错误[error code={}]", storageClient.getErrorCode());
            return null;
        }

        logger.debug("文件上传成功[group_name={}, remoteFileName={}]", results[0], results[1]);
        return results;
    }

    /**
     * 读取文件元数据
     * @param groupName
     * @param remoteFileName
     * @return
     */
    public FileInfo fileMeta(String groupName, String remoteFileName) {
        try {
            logger.debug("读取文件元数据[groupName={}, remoteFileName={}]", groupName, remoteFileName);

            return storageClient.get_file_info(groupName, remoteFileName);

        } catch (IOException e) {
            logger.error("读取文件元数据错误", e);
        } catch (Exception e) {
            logger.error("读取文件元数据错误", e);
        }
        return null;
    }

    /**
     * 文件下载
     * @param groupName
     * @param remoteFileName
     * @return
     */
    public InputStream download(String groupName, String remoteFileName) {
        try {
            logger.debug("文件下载[groupName={}, remoteFileName={}]", groupName, remoteFileName);

            byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
            InputStream ins = new ByteArrayInputStream(fileByte);
            return ins;

        } catch (IOException e) {
            logger.error("文件下载错误", e);
        } catch (Exception e) {
            logger.error("文件下载错误", e);
        }
        return null;
    }

    /**
     * 文件删除
     * @param groupName
     * @param remoteFileName
     * @return
     * @throws IOException
     * @throws MyException
     */
    public int delete(String groupName, String remoteFileName) throws IOException, MyException {
        logger.debug("文件删除[groupName={}, remoteFileName={}]", groupName, remoteFileName);
        return storageClient.delete_file(groupName, remoteFileName);
    }
}
相关文章
相关标签/搜索