概述
前言
上一篇已经部署了fastdfs文件系统了,现在就要调用API来操作上传,下载,删除。本篇记录一下java调用api实现以上操作。
编译
上一篇就已经下载了fastdfs-client-java-master,解压可以看到目录结构,有一个pom.xml文件,这是一个maven项目,打开Eclipse,以Maven项目形式导入。
刚导入项目可能会出错,打开pom.xml看一下报错的位置,可能是由于本地没有找到当前项目需要的包,或存在该包但不同版本,这时可以根据本地拥有的包进行更改,或者执行maven install联网进行安装。
我根据我本地缓存的包和版本信息进行了修改,怎么查看缓存,先要看你把maven库配置到哪,默认是在“我的文档”。
修改完以后再执行Maven install(如果在pom.xml依赖库中的存在本地找不到相应版本的包则从网络下载到本地,再将你打好的jar包安装到你的本地库中),提示如下错误,大概意思是说,maven需要jdk环境而不是jre环境。
在eclipse的菜单中,进入 Window > Preferences > Java > Installed JREs > Execution Environments。找到你的Jdk路径导入。
再执行Maven install,可以看到执行成功。
可以看到在该目录下生成了fastdfs-client-java-1.25.jar包,这样就可以利用它来执行响应的API。
调用API
在调用api之前先写一个配置文件fdfs_client.conf,这个配置文件的功能其实跟FastDFS提供测试的client.conf很像,主要是关于一些track的ip之类。
connect_timeout = 30 #连接tracker服务器超时时长
network_timeout = 60 #socket连接超时时长
charset = UTF-8 #编码
http.tracker_http_port = 8090 #端口
http.anti_steal_token = no #防盗链
http.secret_key = FastDFS1234567890 #密钥
tracker_server = 172.16.0.245:22122 #可以配置多个
上传成功,打印组名和文件名
代码网上搜一下很多,能实现功能:,上传、下载、删除。具体效果自行测试。
public class FastDFS {
public String conf_filename = "E:\list\fdfs_client.conf";
private String group_name = "group1";
private String remote_filename = "M00/00/00/rBAA9VjHEqCABFTDAAAO9LBgdjk566.jpg";
@Test
public void upload(){
try {// 初始化全局配置。加载一个配置文件。
ClientGlobal.init(conf_filename);
// 创建一个TrackerClient对象。
TrackerClient trackerClient = new TrackerClient();
// 创建一个TrackerServer对象。
TrackerServer trackerServer = trackerClient.getConnection();
// 声明一个StorageServer对象,null。
StorageServer storageServer = null;
// 获得StorageClient对象。
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 直接调用StorageClient对象方法上传文件即可。
String[] strings;
strings = storageClient.upload_file("E:\list\2.jpg", "jpg", null);
for (String string : strings) {
System.out.println(string);
}
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
}
@Test
public void download(){
try {
int errno;
// 初始化全局配置。加载一个配置文件
ClientGlobal.init(conf_filename);
// 创建一个TrackerClient对象
TrackerClient tracker = new TrackerClient();
// 创建一个TrackerServer对象。
TrackerServer trackerServer = tracker.getConnection();
// 声明一个StorageServer对象,
StorageServer storageServer = null;
// 获得StorageClient对象
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// byte[] b = storageClient.download_file("group1", "M00/00/00/rBAG61i3wL6AUP98AAAO9LBgdjk220.jpg");
errno = storageClient.download_file(group_name, remote_filename,
new DownloadFileWriter("E:\list\" + UUID.randomUUID().toString() + ".jpg"));
if (errno == 0) {
System.err.println("Download file success");
} else {
System.err.println("Download file fail, error no: " + errno);
}
// System.out.println(b);
// 将下载的文件流保存
// IOUtils.write(b, new
// FileOutputStream("D:/"+UUID.randomUUID().toString()+".jpg"));
} 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(group_name, remote_filename);
System.out.println(fi.getSourceIpAddr()); // 172.16.6.235
System.out.println(fi.getFileSize()); // 3828B
System.out.println(fi.getCreateTimestamp()); // Thu Mar 02 14:50:38
// CST 2017
System.out.println(fi.getCrc32()); // -1335855559
} 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(group_name, remote_filename);
System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我想说一下,下载这部分。网上一些是使用apache的IOUtil类来做文件输出,这需要导入包,如果没有则要自己下载,我偷懒了一下,想直接写个输出流导出就好了,但去源码中看了一下测试类,发现已经有实现好的方法,那就直接拿来用吧。
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtil;
如下,都是写好的测试类,包括上传、下载、删除、获取文件信息等,而且单单一个 storageClient.upload_file()上传方法就有多个参数,其他功能也是有多个参数的,可以根据自己需要,调用不同方法。
)
小结
本篇主要是记录一下通过调用api来实现文件的上传、下载、删除功能,看上去相对简单,只是为了验证功能,实际开发的时候建议封装一下,网上也有很多,根据实际要求参考大神们的封装。
最后
以上就是怡然红牛为你收集整理的FastDFS的API使用前言编译调用API小结的全部内容,希望文章能够帮你解决FastDFS的API使用前言编译调用API小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复