欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Day08 [学成在线]课程图片管理&FastDFS

程序员文章站 2022-06-13 12:31:28
...

Day08 [学成在线]课程图片管理&FastDFS

执行流程如下:

  • 管理员进入教学管理前端,点击上传图片
  • 图片上传至文件系统服务,文件系统请求fastDFS上传文件
  • 文件系统将文件入库,存储到文件系统服务数据库中。
  • 文件系统服务向前端返回文件上传结果,如果成功则包括文件的Url路径。
  • 课程管理前端请求课程管理进行保存课程图片信息到课程数据库。
  • 课程管理服务将课程图片保存在课程数据库。

在centos7安装FastDFS具体方法:FastDFS安装教程。笔者一次成功,以前用其他方法失败三次。


安装完成后先进行测试,需在maven中导入主要依赖

<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>

// 加载配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 获取踪迹服务器客户端, 从而根据踪迹客户端来获取服务器
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
// 获取storageClient
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
// 上传文件
String filePath = "D:\\JAVA\\Java_Learning\\IDEA_Project02\\xcEdu\\a.jpg";
// 上传成功后拿到文件id
String fileId = storageClient1.upload_appender_file1(filePath, "jpg", null);
System.out.println(fileId);

通过debug获取fileId后在linux中根据路径便可在fast_storage/data下查找到刚上传的图片
Day08 [学成在线]课程图片管理&FastDFS

Day08 [学成在线]课程图片管理&FastDFS


文件下载测试

String fileId = "group1/M00/00/00/wKiJhF7cqomEFzLfAAAAAJm7pfE595.jpg";
byte[] bytes = storageClient1.download_file1(fileId);
FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\JAVA\\Java_Learning\\IDEA_Project02\\xcEdu\\b.jpg"));
fileOutputStream.write(bytes);

其中fileIdgroup1/M00/00/00/wKiJhF7cqomEFzLfAAAAAJm7pfE595.jpg可以通过浏览器直接访问,前面加上虚拟机ip地址即可。

也可在 C:\Windows\System32\drivers\etc\ 下的hosts修改访问域名


关于 FastDFS-nginx-module 模块的作用:

在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文 件。使用 nginx 的模块
FastDFS-nginx-module 的作用是通过 http 方式访问 storage 中 的文件,当 storage 本机没有要找的文件时向源
storage 主机代理请求文件。


  • 教学课程服务、课程管理服务、用户服务都需要用到文件的上传下载,那么文件系统服务是如何分清是哪个服务对应哪些文件呢?

Day08 [学成在线]课程图片管理&FastDFS
答:一旦其他服务上传文件,例如课程管理服务上传文件,那么文件Id 和课程管理服务的课程 Id 会关联在一起,并保存到课程服务的数据库中。即文件系统服务只存放文件Id, 相当于文件在FastDFS中的地址。
其他服务使用文件系统服务同样如此。

  • 即每次上传文件,需要做两件事:
  • 1.将文件Id 保存到文件系统数据库,作为文件在FastDFS中的地址
  • 2.哪个服务调用文件系统服务,该服务将从文件系统获取到的文件Id 和自己服务对象的 Id 绑定关联后,保存到该服务的数据库。