目录
分布式文件系统
在大数据时代,单机文件存储已经不太彳亍了
于是乎诞生了各种分布式文件系统、云存储等
之前了解hadoop在虚拟机上搭建过hadoop和hdfs集群
hdfs是一个分布式文件系统,把上传的数据分片存储
FastDFS介绍
FastDFS架构
上传流程 & 下载流程
文件上传:
文件下载:
图中画的很明白就不一一赘述了
fileId是由组名+存放路径+文件名组成
FastDFS安装
安装比较繁琐,可以参考 https://www.cnblogs.com/Eivll0m/p/5378328.html
我也搞了半天,就一台阿里云服务器,虚拟机上的centOS有几个,但是版本太低
可以先把tracker,storage安在一台机器上,先体验一把
启动tracker,storage
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
tracker,storage都启起来了
但是nginx还没有配置,之后再配置
FastDFS的java客户端
首先要引入2个依赖
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
fastdfs-client-java
是提供的java客户端
可以在maven中心仓库中找到
https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java
配置文件:
在resources路径下创建config目录,config目录下创建 fastdfs-client.properties
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.tracker_servers = tracker的ip:22122
上传文件
//上传文件
@Test
public void testUpload() throws IOException, MyException {
//加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
//创建TrackerClient
TrackerClient trackerClient = new TrackerClient();
//获取tracker
TrackerServer trackerServer = trackerClient.getConnection();
//获取storage
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
//创建TrackerClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
//上传文件
String filePath = "e:/a.jpg";
String fileId = storageClient1.upload_file1(filePath, "jpg", null); //上传成功后得到的id
System.out.println("fileId : "+fileId);
// group1/M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg
}
group1/M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg
就是传说中的fileId
我们验证下文件上传是否成功,和返回的fileId
说明文件成功上传
其实group1/M00/00/00/
就是对应上图路径中的 /home/fastdfs/fdfs_storage/data/00/00
下载文件
//下载文件
@Test
public void testDownload() throws IOException, MyException {
//加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
//创建TrackerClient
TrackerClient trackerClient = new TrackerClient();
//连接tracker
TrackerServer trackerServer = trackerClient.getConnection();
//获取storage
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
//创建TrackerClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
//下载文件
String fileId= "group1/M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg";
byte[] bytes = storageClient1.download_file1(fileId);
FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/1.jpg"));
fileOutputStream.write(bytes);
}
只需要传一个fileId就可以得到该文件的字节流
查询文件
//查询文件
@Test
public void testQueryFile() throws IOException, MyException {
//加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
//创建TrackerClient
TrackerClient trackerClient = new TrackerClient();
//连接tracker
TrackerServer trackerServer = trackerClient.getConnection();
//获取storage
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
//创建TrackerClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
FileInfo fileInfo = storageClient1.query_file_info("group1", "M00/00/00/rBGcalylpKGAZRzMAABHEBghxQ4101.jpg");
System.out.println(fileInfo);
}
后面需要学习并搭建一个nginx,目的是为了可以通过外网http访问到图片
就像这样
然后再学习一些的fastdfs的java客户端常用 api,争取能把FastDFS用到项目上来解决文件的存储管理
转载请注明:汪明鑫的个人博客 » FastDFS初步学习
说点什么
您将是第一位评论人!