FastDFS文件上传

FastDFS小结一

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务

上传交互过程

  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。

下载交互过程

  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件下载。

上传实现

  1. 导入依赖
		
            org.csource
            fastdfs-client-java
            1.27-SNAPSHOT
        
  1. 编写文件上传的工具类
public class FileUploadUtils {

    private static TrackerClient  trackerClient = null;
    private static StorageServer storageServer = null;
    private static TrackerServer trackerServer;

    /**
     * 构造方法,传入配置文件的路径
     * @param configlocation
     * @throws IOException
     * @throws MyException
     */
    public FileUploadUtils(String configlocation) throws IOException, MyException {
        if (configlocation.startsWith("classpath:")) {

            configlocation = configlocation.replace("classpath:", getClass().getResource("/").getPath());
            //找到配置文件的磁盘路径
            ///D:/idea-workspace/springmvc/court/target/classes/config.properties
           // System.out.println(configlocation);
        }
        ClientGlobal.init(configlocation);
        trackerClient = new TrackerClient();
        trackerServer = trackerClient.getConnection();
    }

    /**
     * 方法的重载   调用内部的方法
     * @param file
     * @param ext_name
     * @return
     * @throws IOException
     * @throws MyException
     */
    public static String upload_file(byte[] file, String ext_name) throws IOException, MyException {
        return upload_file(file, ext_name, null);
    }


    public static String upload_file(byte[] file, String ext_name, NameValuePair[] nameValuePairs) throws IOException, MyException {

        StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
        //通过文件的字节和后缀名获得字符串数组
        String[] uploadFile = storageClient1.upload_file(file, ext_name, null);

        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < uploadFile.length; i++) {
            stringBuffer.append(uploadFile[i]);
            if (i == 0) {
                stringBuffer.append("/");
            }

        }
        //返回文件服务器的地址
        return stringBuffer.toString();
    }
}
  1. config.properties文件 -----就是服务器的域名

你可能感兴趣的:(springboot)