Java SpringBoot最简单的FastDFS使用教学(包括上传和下载测试类)
上周为了写一个FastDFS的上传和下载的接口焦头烂额,疯狂百度,但是每个人的代码结构和编程风格都不一样,导致学习过程举步维艰,但是只要搞明白了原理还是挺简单的。
FastDFS的原理和配置我就不再赘述了,可以参考下面链接的教程,很细致
FastDFS完整配置教程
首先来引入jar包,maven中心仓库没有fdfs的jar包,需要手动下载引用,下载地址fastdfs jar包下载地址
下载压缩包后,解压,运行cmd,进入解压缩目录,输入mvn clean install,提示BUILD SUCCESS就表示已经成功将jar包下载到电脑的maven仓库中了。
(注意:这一步需要电脑中配置maven环境变量)
接下来进入pom.xml中进行引用,代码如下,我这里取消了对org.slf4j的引用是因为spring boot已经自带一个slf4j的版本,再次引用会导致运行报错。
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
然后在配置文件中写入FastDFS的配置信息,我这里的配置文件名是application-dev.properties,写在哪里无所谓,后面会提到,配置如下
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=1234//注意与配置文件要一致!!!
tracker_server=49.7.59.236:22122//注意与配置文件要一致!!!
接下来就是最重要的,测试类
上传测试类:
public static void main(String[] args) throws Exception {
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址,具体指定哪个配置文件可以自己修改。
try {
ClassPathResource cpr = new ClassPathResource("application-dev.properties");
ClientGlobal.init(cpr.getClassLoader().getResource("application-dev.properties").getPath());
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
// 2、创建一个 TrackerClient 对象。直接 new 一个。
TrackerClient trackerClient = new TrackerClient();
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
TrackerServer trackerServer = null;
try {
trackerServer = trackerClient.getConnection();
} catch (IOException e) {
e.printStackTrace();
}
// 4、创建一个 StorageServer 的引用,值为 null
StorageServer storageServer = null;
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 6、使用 StorageClient 对象上传图片。
// 扩展名不带“.”
String[] strings = new String[0];
try {
//fastdfs的引用最主要的就是这一句,其中引入的三个变量分别为本地文件路径,文件后缀名和标签,最后一个这里忽略
strings = storageClient.upload_file("C:/Users/39600/Desktop/agent.txt", "txt", null);
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
// 7、返回数组。包含组名和图片的路径。
for (String string : strings) {
System.out.println(string);
}
}
写好后直接右键运行这个类,如果控制台打印文件保存路径就表示成功了,如果出错可以再检查一下配置文件是否正确以及是否读取了正确的配置文件。这一套方法可以在任何地方取用。
接下来是下载测试类
public static void main(String[] args) throws Exception {
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
try {
ClassPathResource cpr = new ClassPathResource("application-dev.properties");
// ClassLoader a = cpr.getClassLoader();
// URL b = cpr.getClassLoader().getResource("fdfs_client.conf");
ClientGlobal.init(cpr.getClassLoader().getResource("application-dev.properties").getPath());
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
// 2、创建一个 TrackerClient 对象。直接 new 一个。
TrackerClient trackerClient = new TrackerClient();
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
TrackerServer trackerServer = null;
try {
trackerServer = trackerClient.getConnection();
} catch (IOException e) {
e.printStackTrace();
}
// 4、创建一个 StorageServer 的引用,值为 null
StorageServer storageServer = null;
// 5、创建一个 StorageClient1 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用。注意这里是StorageClient1 ,和上面的StorageClient不同,能够饮用的方法也有区别。
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
// 6、使用 StorageClient 对象下载文件。
String[] strings = new String[0];
try {
//首先调用download_file1方法,将文件读取为字节流
byte[] by = storageClient1.download_file1("group1/M00/00/00/ChQFBl2_hIKAGAuOAAAwZm1Ouq4254.jpg");
//变量获取一下文件名称
String fileName = getFileName("group1/M00/00/00/ChQFBl2_hIKAGAuOAAAwZm1Ouq4254.jpg");
//在本地路径创建一个与文件名相同的文件
OutputStream os = new FileOutputStream("D:\\test\\" + fileName);
//将文件字节流写入到创建的文件中
os.write(by, 0, by.length);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
// 7、返回数组。包含组名和图片的路径。
for (String string : strings) {
System.out.println(string);
}
}
运行后在指定路径查看,下载成功