fastdfs api java_FastDFS api介绍

本文介绍了FastDFS的命令行API,包括服务管理、集群信息查看、删除storage节点、文件上传下载及删除。同时,讲解了Java API的使用,如配置、单例模式以及文件操作的测试案例。

1. 命令行api介绍

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

1.1 fastdfs服务管理

tracker进程服务管理脚本

/etc/init.d/fdfs_trackerd [start|stop|restart]

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处于下线不可用状态

675dce9997d217f737b149779bfbe13a.png

f74cd3632ea47c46c52e31d62c337075.png

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

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

2a14f995928dbb5cdcf821bbf0b38bbf.png

1.5 文件下载

/usr/bin/fdfs_download_file [local_filename] []

例如,下载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

例如删除上边上传的nginx

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

2. java api 使用

2.1 引入api

ant源码构建

ant clean package

maven源码构建

mvn clean install

pom.xml 依赖添加

org.csource

fastdfs-client-java

1.27-SNAPSHOT

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();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值