提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
分布式文件系统其实我也不是非常了解,作为it小白,初体验感觉就是类似百度云盘,可以存储照片文件等等。分布式文件系统选型:可以选择租用服务器七牛云(20G),阿里云对象存储,腾讯云对象存储,另外就是自己搭建需要硬件服务器和选择一个分布式的文件系统软件(fastdfs或者hdfs等)
提示:以下是本篇文章正文内容,下面案例可供参考
一、fastdfs是什么?
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 架构包括 Tracker server 和 Storage server。客户端请求Tracker server服务器,Tracker server返回可用的Storage server的端口以及ip。客户端最终文件是存储在Storage server。
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
二、使用步骤
搭建fastdfs,但是需要学习docker。现在我们直接用这个47.95.117.210
上传trackerserver端口22122
访问端口8888端口
入门:
需求:将本地图片上传至图片服务器,在控制台打印url
1.创建maven工程fastdfsDEMO
2.在pom.xml中引入依赖
2.测试
代码如下(示例):
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init(“D:/maven_work/fastDFS-demo/src/fdfs_client.conf”);
// 2、创建一个 TrackerClient 对象。直接 new 一个。
TrackerClient trackerClient = new TrackerClient();
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
TrackerServer trackerServer = trackerClient.getConnection();
// 4、创建一个 StorageServer 的引用,值为 null
StorageServer storageServer = null;
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 6、使用 StorageClient 对象上传图片。
//扩展名不带“.”
String[] strings = storageClient.upload_file(“D:/pic/benchi.jpg”, “jpg”,
null);
// 7、返回数组。包含组名和图片的路径。
for (String string : strings) {
System.out.println(string);
}
http://47.95.117.210:8888/组名/控制台打印输出的文件名
项目实战准备代码如下:
前端代码
handleSuccess(response, file, fileList){
console.log("===========");
console.log(response);
console.log(file);
console.log(fileList);
this.shop.logo = response.resultObj;
},
handleRemove(file, fileList) {
var filePath =file.response.resultObj;
this.$http.delete("/dfs?path="+filePath)
.then(res=>{
if(res.data.success){
this.$message({
message: '删除成功!',
type: 'success'
});
}else{
this.$message({
message: '删除失败!',
type: 'error'
});
}
})
},
后端代码:
@RestController
@RequestMapping("/dfs")
public class FastDfsController {
@PostMapping
public AjaxResult upload(@RequestPart(required = true,value = "file") MultipartFile file){
try {
System.out.println(file.getOriginalFilename() + ":" + file.getSize());
String originalFilename = file.getOriginalFilename();
// xxx.jpg
String extName = originalFilename.substring(originalFilename.lastIndexOf(".")+1);
System.out.println(extName);
String filePath = FastDfsUtil.upload(file.getBytes(), extName);
return AjaxResult.me().setResultObj(filePath); //把上传后的路径返回回去
} catch (IOException e) {
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage("上传失败!"+e.getMessage());
}
}
/**
* 参数:完整路径 /goup1/xxxxx/yyyy
* 返回值:成功与否,还要返回地址
*
*/
@DeleteMapping
public AjaxResult del(@RequestParam(required = true,value = "path") String path){
String pathTmp = path.substring(1); // goup1/xxxxx/yyyy
String groupName = pathTmp.substring(0, pathTmp.indexOf("/")); //goup1
String remotePath = pathTmp.substring(pathTmp.indexOf("/")+1);// /xxxxx/yyyy
System.out.println(groupName);
System.out.println(remotePath);
FastDfsUtil.delete(groupName, remotePath);
return AjaxResult.me();
}
}