FastDFSUtils.java 6.14 KB
package cn.wisenergy.chnmuseum.party.common.dfs;

import org.apache.commons.io.FilenameUtils;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

/**
 * 上传图片到FastDFS
 */
public class FastDFSUtils {

    private static String dfsFileAccessBasePath;

    @Value("${dfsFileAccessBasePath:#{null}}")
    public static void setDfsFileAccessBasePath(String dfsFileAccessBasePath) {
        FastDFSUtils.dfsFileAccessBasePath = dfsFileAccessBasePath;
    }

    static {
        try {
            Properties props = new Properties();
            final InputStream in = new ClassPathResource("fastdfs-client.properties").getInputStream();
            props.load(in);
            ClientGlobal.initByProperties(props);
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }
    }

    public static String[] uploadPic(String path, String fileName, long size) {
        String[] fileIds = null;
        try {
            // ClientGloble 读配置文件
            // 老大客户端
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            String extName = FilenameUtils.getExtension(fileName);

            NameValuePair[] meta_list = new NameValuePair[3];
            meta_list[0] = new NameValuePair("fileName", fileName);
            meta_list[1] = new NameValuePair("fileExt", extName);
            meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));

            // http://172.16.15.244:8081/group1/M00/00/00/rBAP9FfFG62AZsuBAADeW7MfEHA287.png
            // group1/M00/00/01/wKjIgFWOYc6APpjAAAD-qk29i78248.jpg
            fileIds = storageClient.upload_file(path, extName, meta_list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileIds;
    }

    public static String uploadInputStream(InputStream inStream, String fileName, long size) {
        String[] fileIds;
        try {
            // ClientGloble 读配置文件
            // 老大客户端
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            String extName = FilenameUtils.getExtension(fileName);
            NameValuePair[] meta_list = new NameValuePair[3];
            meta_list[0] = new NameValuePair("fileName", fileName);
            meta_list[1] = new NameValuePair("fileExt", extName);
            meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));
            fileIds = storageClient.upload_file(null, size, new UploadFileSender(inStream), extName, meta_list);
            return dfsFileAccessBasePath + "/" + fileIds[0] + "/" + fileIds[1];
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String uploadPic(byte[] pic, String fileName, long size) {
        String[] fileIds = null;
        try {
            // ClientGloble 读配置文件
            // 老客户端
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            String extName = FilenameUtils.getExtension(fileName);
            // 设置图片meta信息
            NameValuePair[] meta_list = new NameValuePair[3];
            meta_list[0] = new NameValuePair("fileName", fileName);
            meta_list[1] = new NameValuePair("fileExt", extName);
            meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));
            // 上传且返回path
            fileIds = storageClient.upload_file(pic, extName, meta_list);
            return fileIds[0] + "/" + fileIds[1];
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static boolean deletePic(String fileUrl) {
        try {
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            StorePath storePath = StorePath.praseFromUrl(fileUrl);
            int i = storageClient.delete_file(storePath.getGroup(), storePath.getPath());
            System.out.println(i == 0 ? "删除成功" : "删除失败:" + i);
            return i == 0;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static String deletePic(String[] fileIds) {
        try {
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            int i = storageClient.delete_file(fileIds[0], fileIds[1]);
            System.out.println(i == 0 ? "删除成功" : "删除失败:" + i);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileIds[1];
    }

    private static class UploadFileSender implements UploadCallback {

        private InputStream is;

        public UploadFileSender(InputStream is) {
            this.is = is;
        }

        @Override
        public int send(OutputStream out) throws IOException {
            byte[] b = new byte[1024];
            int readBytes;
            while ((readBytes = is.read(b)) != -1) {
                out.write(b, 0, readBytes);
            }
            return 0;
        }
    }

}