4.0.0
cn.com.fastdfs.client.test
fdfs_client
0.0.1-SNAPSHOT
org.apache.maven.plugins
maven-compiler-plugin
1.7
1.7
junit
junit
4.11
test
org.csource
fastdfs-client-java
1.27-SNAPSHOT
commons-io
commons-io
2.4
我们会发现报错了,本地仓库没有fastdfs-client-java的依赖:
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.27-SNAPSHOT -Dpackaging=jar -Dfile=C:\Users\Administrator\Desktop\fastdfs-client-java-master\fastdfs-client-java-master\target\fastdfs-client-java-1.27-SNAPSHOT.jar
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.195.129:22122
可以看到和我们之前在linux中配置的client.conf的参数基本上一样,除了tracker_server,其它参数都是可选的,都有默认值。这里我们将追踪服务器的地址和端口配置上去。
package fdfs_client;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestFastDFS {
public String conf_filename = System.getProperty("user.dir")+"\\src\\main\\resources\\fdfs_client.conf";
public String local_filename = "D:\\test.doc";//要上传的文件
@Before
public void setUp() throws Exception {}
@After
public void tearDown() throws Exception {}
@Test
public void testUpload() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
// NameValuePair nvp = new NameValuePair("age", "18");
NameValuePair nvp[] = new NameValuePair[] {
new NameValuePair("name", "test_doc"),
new NameValuePair("desc", "the test file") };
String fileIds[] = storageClient.upload_file(local_filename, "doc",
nvp);
System.out.println(fileIds.length);
System.out.println("组名:" + fileIds[0]);
System.out.println("路径: " + fileIds[1]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
}
}
首先测试FastDFS的连接以及上传,使用ClientGlobal.init方法来进行配置文件的加载,然后使用TrackerClient获取TrackerServer的连接,进而与追踪服务器进行交互,获取StorageClient。
@Test
public void testDownload() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
byte[] b = storageClient.download_file("group1",
"M00/00/00/wKjDgltBkACEPjBxAAAAAHfj3SA788.txt");
System.out.println("byte's length:"+b.length);
IOUtils.write(b, new FileOutputStream("D:/"
+ UUID.randomUUID().toString() + ".txt"));
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果:
@Test
public void testGetFileInfo() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
FileInfo fi = storageClient.get_file_info("group1",
"M00/00/00/wKjDgltBkACEPjBxAAAAAHfj3SA788.txt");
System.out.println(fi.getSourceIpAddr());
System.out.println(fi.getFileSize());
System.out.println(fi.getCreateTimestamp());
System.out.println(fi.getCrc32());
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果:
@Test
public void testGetFileMate() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
NameValuePair nvps[] = storageClient.get_metadata("group1",
"data/00/00/wKjDgltBkACEPjBxAAAAAHfj3SA788.txt");
for (NameValuePair nvp : nvps) {
System.out.println(nvp.getName() + ":" + nvp.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果:
@Test
public void testDelete() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
int i = storageClient.delete_file("group1",
"M00/00/00/wKjDgltBsCyATs9JAAAABzTycws375.doc");
System.out.println(i == 0 ? "删除成功" : "删除失败:" + i);
} catch (Exception e) {
e.printStackTrace();
}
}
运行之前:
可以看到,doc文件和metadata信息文件都被成功删除了。
客户端样例源代码见我的GitHub:https://github.com/ZhuYaoGuang/fdfs_client.git