开发者学堂课程【Spring Boot+Vue.js+FastDFS实现分布式图片服务器 :案例开发-文件管理服务开发(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/742/detail/13146
案例开发-文件管理服务开发(一)
内容介绍
一、搭建文件管理服务
二、启动文件管理服务
三、总结
在前面已经实现了通过 http 成功访问 storage 上面的图片,fastDFS 已经安装完毕,接下来进行文件管理服务。
一、搭建文件管理服务
1.前面主要是前后端分离的架构,上传文件的 html 是前端,文件管理服务是后端服务端。
文件管理服务提供通过 http 方式上传文件,删除文件、查询文件的功能,用户上传很多文件,管理员通过文件管理服务对文件服务器上的文件进行管理。
文件管理服务采用 Spring Boot 开发,文件管理服务通过与 fastDFS 交互最终将用户上传的文件存储到 fastDFS 上。
在 fastDFS 入门程序上继续开发:
2. 搭建环境:
SpringBoot 依赖以及 web 应用包已经成功加入,接下来进行添加一些准备的工作。
(1)创建包 命名为:cn.itcats.javaee.fastdsf
(2) 创建模型 model 是一个 FileSystem 文件系统。里面有文件 Id,文件路径,文件大小,文件名称等等。
(3) 模型创建方法:有一些基本的属性,还有 get/set 方法!将其复制到环境中。
(4)创建包:cn.itcats.javaee.fastdsf.controller,
(5)在 controller 下面创建将来客户端即前端。用户上传图片请求 controller,将其图片上传到文件管理服务上。
(6)创建 FileServerController
@restController
@requestMapping(“/filesystem”)
Public class FileServerController{
添加注解:
@PostMapping(“/upload”)
//上传图片并且添加路径
@ResponseBody
//接收数据
Public FileSystem upload(@RequestParam(“file”) MultpartFile file){
//刚刚创建的模型
FileSystem fileSystem =new FileSystem
//定义对象
//MultpartFile file 将来传给客户端的名称是根据
@RequestParam(“”)
进行指定 将来客户端传给服务端的名称就是 file
//当客户端通过 http 请求到文件管理服务 controller 方法,就是刚刚写的 upload 方法,即用户请求 html 页面,要上传图片的时候,就会将页面上传的图片上传到 upload 方法中。
//将文件先存储在 web 服务器上(本机),再调用 fastDFS 的 client 将文件上传到 fastDFS 服务器。
//先完成第一步:将文件存储到 web 服务器上。再借助测试代码,将本机文件上传到 fastDFS 上面
String OriginalFilename= file.getOriginalFilename()
//得到原始名称
String extention=
OriginalFilename.substring(originalFilename.lastIndexOf(“.”))
//最后一个点开始的内容即拓展名
因为最终要调用测试代码,上面的文件地址就是刚刚上传的文件,而该文件存在于 web 服务器上,所以要拿到文件的拓展名,既然要拿到拓展名就要拿到原始名称。
拿到拓展名后就可以修改测试代码中,相应的位置。要将上传成功的图片存储再 web 服务器(本机)上的文件上传到 fastDFS。要找到刚刚上传的文件的物理路径。
当用户调用 file 的时候就可以拿到 但 fiel 是临时文件,可以通过一个方法将 file 放到物理路径上。
//防止重名,打造一个文件名
Striing fileNameNew=UUID.randomUUID()+extention;
//定义 file,使用 file 存储上传的文件,就可以将新上传的文件上传到物理路径下。并且可以拿到文件的地址。
File file1=new File(“F:\\develop\\upload\\”+fileNameNew)
fiel.transferTo(file1);
//获取新上传文件的物理路径
String newFilePath= File.getAbsolutePath()
//将获取到的物理路径放到刚刚的位置上,这就是新文件路径
filesyStem.setFileId(fileIId);
filesyStem.setFilePath(fileId);
filesyStem.setFileName(originalFilename);
return null;
//防止报错
}
3. 首先用户在 html 页面点击上传文件,通过 http 请求到文件管理服务中的 contoller 方法,controller 方被调用,将页面上传的文件传到 upload 方法中,文件得到文件的原始名称,拿到文件的原始名称的目的是获取文件的拓展名,取出拓展名,并且放到下方测试代码中。
4.定义一个新文件,将上传到文件放到指定的路径中,写进新文件后,获取新上传文件的物理路径。接下来的代码是之前测试过的代码,在文件元信息一栏可以将文件的名称写进去。
接下来就可以调用 upload 方法,返回文件 ID /fileID ,最终要返回 FileSystem。
在得到文件 ID 后,将文件 ID 写入 FileSystem 对象中的 setFileID、setFilePath 中还有 setFileName 中写入原始名称
//最终调用 service 以及 dao 将文件的路径存储到数据库中,由于时间关系就先不完成。以上就完成了文件上传的代码编写。