【spring mvc】——fastdfs文件上传
·
引言
上回说到普通的文件上传,直接利用IO进行的,这回跟大家介绍一个工具——FastDFS,看它是如何实现文件上传的。
什么是FastDFS?
FastDFS是用C语言编写的一款开源的分布式文件系统,FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
文件上传的流程
FastDFS用到了Tracker和Storage,Tracker是一个中间处理程序,client端通过跟Tracker进行通讯,了解到Storage的相关信息,然后直接通过跟Storage进行数据存储。Client端,Tracker和Storage的通讯如下图所示:
文件上传过程
文件的上传过程如下图所示:
文件上传的代码:
/*
* 上传文件
*/
@RequestMapping(value={"/upload"})
@ResponseBody
public void upload( MultipartFile file, HttpServletRequest request,HttpServletResponse response,ModelMap model){
//获取文件扩展名
String ext_Name = file.getOriginalFilename().split("\\.")[1];
//获取文件名
String videoName=file.getOriginalFilename().split("\\.")[0];
byte[] bytes = null;
try {
bytes = file.getBytes(); //将文件转换成字节流形式
} catch (IOException e) {
e.printStackTrace();
}
//调用上传文件的具体方法
String videoPath=uploadFile(bytes,ext_Name);
JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();
//设置文件信息,返回到页面上
Video video=new Video();
video.setVideoPath(videoPath);
video.setVideoName(videoName);
jackJsonUtil.beanToJson(response,video);
}
/*
* 利用字节流上传文件
*/
public String uploadFile(byte[] byteFile, String ext_file) {
// 拼接服务区的文件路径
StringBuffer sbPath = new StringBuffer();
sbPath.append("http://192.168.22.252");
try {
// 初始化文件资源
ClientGlobal
.init("F:\\project\\dmsd-itoo-video\\wanghongyun-video-0817\\dmsd-itoo-video-parent\\dmsd-itoo-video-web\\src\\main\\resources\\fdfs_client.conf");
// 链接FastDFS服务器,创建tracker和Stroage
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
//利用字节流上传文件
String[] strings = storageClient.upload_file(byteFile, ext_file, null);
for (String string : strings) {
sbPath.append("/" + string);
System.out.println(string);
}
// 全路径
System.out.println(sbPath);
} catch (IOException | MyException e) {
e.printStackTrace();
}
return sbPath.toString();
}
看下边的代码部分:
TrackerServer利用TrackerClient建立连接之后,StorageClient就可以直接跟StorageServer进行相关的存储操作了。
文件下载过程
文件下载流程如下:
由于我们的视频系统尚未开发下载功能,所以代码部分稍后补上。
总结
如果有兴趣的可以试试,FastDFS的上传速度是很快的,我们还用到了nginx的反向代理功能进行文件获取,用FastDFS收获到挺多东西的。
除了FastDFS外,还有一种文件上传方式,是淘淘商城里的,但是我还没有尝试,所以从红霞那里把她的总结博客扯过来吧~博客地址:http://blog.csdn.net/hhx0626/article/details/52516614
更多推荐
已为社区贡献2条内容
所有评论(0)