java使用fastDFS

139 阅读1分钟

依赖

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27-SNAPSHOT</version>
        </dependency>

客户端工具

public class FastDFSClient {


    /**
     * fastDFS配置文件名称
     */
    private final static String FAST_DFS_CLIENT_CONF_NAME = "fastdfs-client.properties";
    /**
     * 元数据信息 文件名 文件名后缀 文件大小
     */
    private final static String METADATA_FILE_NAME = "fileName";
    private final static String METADATA_FILE_EXT = "fileExt";
    private final static String METADATA_FILE_SIZE = "fileSize";

    public FastDFSClient() {
        init();
    }

    /**
     * 初始化方法
     */
    private void init() {
        String path = null;
        try {
//            path = new ClassPathResource(FAST_DFS_CLIENT_CONF_NAME).getFile().getAbsolutePath();
            ClientGlobal.initByProperties("/Users/mac/project/opnc/trunk/opnc/opnc/opnc-parent/opnc-config/opnc-config-portal/opnc-config-portal-server/src/main/resources/fastdfs-client.properties");
        } catch (Exception e) {
            log.info(LogFormat.formatMsg("FastDFSClient.init", "FAST_DFS_CLIENT_CONF_NAME=" + FAST_DFS_CLIENT_CONF_NAME + ",absolutePath=" + path, "init fastDFS-config fail"));
            LogUtil.getTrace(e);
        }
    }


    /**
     * 文件上传
     *
     * @param file 文件
     * @return
     */
    public static String[] upload(MultipartFile file) {
        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            String extension = FilenameUtils.getExtension(file.getOriginalFilename());

            NameValuePair[] metaList = new NameValuePair[]{
                    new NameValuePair(METADATA_FILE_NAME, file.getOriginalFilename()),
                    new NameValuePair(METADATA_FILE_EXT, extension),
                    new NameValuePair(METADATA_FILE_SIZE, String.valueOf(file.getSize()))
            };
            return storageClient.upload_file(file.getBytes(), extension, metaList);
        } catch (Exception e) {
            log.info(LogFormat.formatMsg("FastDFSClient.upload", "", "upload file error"));
            LogUtil.getTrace(e);
        }
        return null;
    }

    public static InputStream downFile(String groupName, String remoteFileName) {
        InputStream ins = null;
        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

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

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ins;
    }


    /**
     * 文件删除
     *
     * @param groupName      组名
     * @param remoteFileName fileId
     */
    public static boolean deleteFile(String groupName, String remoteFileName) {
        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
            StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
            int errno = storageClient1.delete_file1(remoteFileName);
            if (errno == 0) {
                log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "groupName=" + groupName + ",remoteFileName=" + remoteFileName, "deleteFile success"));
                return true;
            }
            log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "groupName=" + groupName + ",remoteFileName=" + remoteFileName + ",errno=" + errno, "deleteFile fail"));
            return false;
        } catch (Exception e) {
            log.info(LogFormat.formatMsg("FastDFSClient.deleteFile", "", "deleteFile error"));
            LogUtil.getTrace(e);
        }
        return false;
    }


    /**
     * 根据组名和文件名获取文件信息
     *
     * @param groupName
     * @param remoteFileName
     * @return
     */
    public static NameValuePair[] getFileInfo(String groupName, String remoteFileName) {
        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, groupName);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
            return storageClient.get_metadata(groupName, remoteFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

配置文件

# ���ӳ�ʱ��ʱ�� s
fastdfs.connect_timeout_in_seconds=60
# ���糬ʱʱ��
fastdfs.network_timeout_in_seconds=60
# �ַ�����
fastdfs.charset=UTF-8
# tracker�� httpͨ��Э��Ķ˿�
fastdfs.http_tracker_http_port=80
# 22122 tracker��tcp�˿�
fastdfs.tracker_servers=192.168.0.90:22122

上传文件的接口

    public BaseResp uploadAndGet(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "param") String param, HttpServletResponse response) {
        log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "file=" + file.getOriginalFilename() + "param=" + param, "start..."));

        BaseResp resp = new BaseResp();
        String[] upload = FastDFSClient.upload(file);
        if (upload == null) {
            log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "file=" + file.getOriginalFilename(), "upload fail,upload array is null"));
            resp.setErrCode("9999");
            resp.setErrMsg("上传失败");
            return resp;
        }
        String dir = upload[0] + "/" + upload[1];
        log.info(LogFormat.formatMsg("ConfigUserController.uploadAndGet", "", "dir=" + dir));
        resp.setErrMsg("成功,dir=" + dir);
        InputStream in = null;
        try {
            in = FastDFSClient.downFile(upload[0], upload[1]);
            byte[] buffer = new byte[in.available()];
            in.read(buffer);
            response.setContentLength(buffer.length);
            response.setHeader("Content-Disposition", "attachment;filename=" + "remoteFileName");
            ServletOutputStream outputStream = response.getOutputStream();
            outputStream.write(buffer);
            outputStream.flush();

        } catch (Exception e) {
            LogUtil.getTrace(e);
        }
        return resp;
    }