• FastDFS api介绍


    1. 命令行api介绍

    FastDFS提供了可用于运维测试的命令行api,下面进行介绍:

    1.1 fastdfs服务管理

    1. tracker进程服务管理脚本
     /etc/init.d/fdfs_trackerd [start|stop|restart]
    
    1. storage进程服务管理脚本
    /etc/init.d/fdfs_storaged [start|stop|restart]
    

    1.2 集群信息

    用于查看集群信息,包括:tracker信息、storage信息、group信息以及集群运行状况;命令可以在任意一台storage 节点上执行

    /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    

    如下图,集群由两个tracker,两个group。其中group2中的storage1处于下线不可用状态

    1.3 删除storage节点

    /usr/bin/fdfs_monitor /etc/fdfs/storage.conf delete group2 192.168.56.11
    

    1.4 文件上传

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf [文件名]
    

    例如上传nginx-1.14.0.tar.gz文件

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./nginx-1.14.0.tar.gz
    

    返回包含文件在fastdfs存储路径(store_path0下)信息和存储文件名信息

    group1/M00/00/00/wKg4CltFU7WAAzX-AA-B0CmJB5A.tar.gz
    

    此时可以通过浏览器访问刚刚上传的文件

    1.5 文件下载

    /usr/bin/fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>]
    

    例如,下载fastdfs中的nginx(wKg4CltFWAKADvr_AA-B0CmJB5A.tar.gz )到本地,指定下载的文件名文件名为nginxdownload.tar.gz

    /usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKg4CltFWAKADvr_AA-B0CmJB5A.tar.gz nginxdownload.tar.gz
    

    1.6 文件删除

    /usr/bin/fdfs_delete_file <config_file> <file_id>
    

    例如删除上边上传的nginx

    /usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKg4CltFU7WAAzX-AA-B0CmJB5A.tar.gz
    

    2. java api 使用

    FastDFS提供了良好的java api接口,源码GitHub下载地址:https://github.com/happyfish100/fastdfs-client-java.git
    引入api的方式有两种:

    2.1 引入api

    1. ant源码构建
    ant clean package
    
    1. maven源码构建
    mvn clean install
    

    pom.xml 依赖添加

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

    2.2 配置

    添加配置文件fdfs_client.conf,增加以下配置

    connect_timeout = 2
    network_timeout = 30
    charset = UTF-8
    http.tracker_http_port = 80
    http.anti_steal_token = no
    http.secret_key = FastDFS1234567890
    
    tracker_server = 192.168.56.10:22122
    tracker_server = 192.168.56.11:22122
    

    http.anti_steal_token:配置防盗链,no表示不开启(详细参考FastDFS防盗链一节)
    http.secret_key:防盗链密码
    tracker_server:tracker连接信息,有多少tracker就配置几个

    2.3 api 简单使用

    单例模式,无线程池;读取classpath下fdfs_client.conf配置文件

    package com.aixin.tuna.fdfs;
    
    import org.csource.fastdfs.*;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    /**
     * Created by dailin on 2018/7/11.
     */
    public class FdfsUtil {
    
        static class Nested {
            private static TrackerServer trackerServer =null;
            private static StorageServer storageServer = null;
            private static StorageClient storageClient = null;
    
            static {
                try {
                    ClientGlobal.init("fdfs_client.conf");
                    TrackerClient tracker = new TrackerClient();
                    trackerServer = tracker.getConnection();
                    storageClient = new StorageClient(trackerServer, storageServer);
                }catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
        }
    
        //获取单例
        public  static StorageClient getStorageClient() {
            return Nested.storageClient;
        }
    }
    
    

    测试:

    package fdfs;
    
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    
    import com.aixin.tuna.fdfs.FdfsUtil;
    import org.csource.common.NameValuePair;
    
    import org.csource.fastdfs.FileInfo;
    import org.csource.fastdfs.StorageClient;
    import org.junit.Before;
    import org.junit.Test;
    
    public class TestFastDfs {
        private StorageClient storageClient;
    
        @Before
        public void init() {
            this.storageClient = FdfsUtil.getStorageClient();
        }
    
        /**
         * 测试文件上传,得到上传后的文件路径及文件名称
         */
        @Test
        public void testUpload() {
            try {
                String local_filename = "C:\Users\1\Desktop\1.png";  //本地文件路径
    
                String[] file = storageClient.upload_file(local_filename, "png", null);
    
                System.out.println(file.length);
                System.out.println("组名:" + file[0]);
                System.out.println("路径: " + file[1]);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 测试文件下载,根据文件所在group和文件路径信息访问文件
         */
        @Test
        public void testDownload() {
            try {
                String groupName = "group2";
                String filePath = "M00/00/00/wKg4C1tFegGAK7WZAADdeFFxlXA481.png";
    
                byte[] bytes = storageClient.download_file(groupName, filePath);
                String storePath = "C:\Users\1\Desktop\download1.png";
    
                OutputStream out = new FileOutputStream(storePath);
                out.write(bytes);
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取文件基本信息,根据文件所在group和文件路径信息访问文件
         */
        @Test
        public void testGetFileInfo() {
    
            try {
                String groupName = "group2";
                String filePath = "M00/00/00/wKg4C1tFegGAK7WZAADdeFFxlXA481.png";
    
    
                FileInfo file = storageClient.get_file_info(groupName, filePath);
                System.out.println("source_ip:" + file.getSourceIpAddr());
                System.out.println("file_size:" + file.getFileSize());
                System.out.println("upload_time:" + file.getCreateTimestamp());
                System.out.println(file.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void testGetFileMatedata() {
            try {
                String groupName = "group2";
                String filePath = "M00/00/00/wKg4C1tFmmqATh8jAA-B0CmJB5A.tar.gz";
    
                NameValuePair nvps[] = storageClient.get_metadata(groupName, filePath);
                if (null != nvps && nvps.length > 0) {
                    for (NameValuePair nvp : nvps) {
                        System.out.println(nvp.getName() + ":" + nvp.getValue());
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 删除文件,根据文件所在group和文件路径信息访问文件
         */
        @Test
        public void testDelete() {
    
            try {
                String groupName = "group2";
                String filePath = "M00/00/00/wKg4C1tFlT6ASyqKAADdeFFxlXA080.png";
                int i = storageClient.delete_file(groupName, filePath);
                System.out.println(i == 0 ? "删除成功" : "删除失败:" + i);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    网络爬虫概述
    Redis常见问题汇总
    分布式锁和Redis事务
    Redis主从复制
    数据持久化
    位图操作bitmap
    数据类型:Hash散列数据类型
    进程池
    事件Event实现消费者模型
    事件Event
  • 原文地址:https://www.cnblogs.com/xiaolinstudy/p/9341766.html
Copyright © 2020-2023  润新知