正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一点东西,下面分享一下

一、FastDFS简介:

参见博客:http://blog.csdn.NET/liweizhong193516/article/details/53234486

二、FastDFS使用流程介绍:

我们在itoo的dobbu+zk框架中使用fastdfs+nginx+MySQL实现上传附件的功能,主要原理就是将附件上传到fastdfs得到一个文件的链接路径url,我们获取到这个url将他以字符串形式保存到我们的mysql中,下载的时候获取到这个url直接打开或者下载附件。(url内容参见博客:http://blog.csdn.Net/liweizhong193516/article/details/52556526)

默认的,我们就知道fastdfs后面还有一个nginx服务器,当我们进行存储文件的时候,我们要通过fastdfs给我们生成一个保存地址,也就是grounpID 和保存地址,然后将文件已key-value方式存进nginx服务器中;当我们进行读取文件的时候,我们要通过获取mysql里面的相应文件的存储地址去nginx服务器中通过key,去取出我们的文件进行展示。(所以下载图,有点问题,在这里解释一下)

三、实现流程:

1、配置依赖:因为我们使用的maven来管理工程,所以,我们需要去陪pom文件

[html] view plaincopy print?
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.leech</groupId>
  5. <artifactId>fastdfs-demo</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>fastdfs-demo</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.11</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.csource</groupId>
  22. <artifactId>fastdfs-client-java</artifactId>
  23. <version>1.25</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>commons-io</groupId>
  27. <artifactId>commons-io</artifactId>
  28. <version>2.4</version>
  29. </dependency>
  30. </dependencies>
  31. </project>

当然,更多时候我们利用maven的继承特性,直接配置在父工程中,然后继承下来就o了。

2、新建fdfs_client.conf文件,在我们的itoo中,我们建立在(src/main/resources底下)

[html] view plaincopy print?
  1. connect_timeout = 2
  2. network_timeout = 30
  3. charset = UTF-8
  4. http.tracker_http_port = 80
  5. #没什么用
  6. http.anti_steal_token = no
  7. http.secret_key = FastDFS1234567890
  8. tracker_server = 192.168.17.112:22122
  9. #tracker_server = 192.168.0.119:22122

3、实现文件上传:

[java] view plaincopy print?
  1. public void save(HttpServletRequest request,HttpServletResponse response){
  2. String videoName=request.getParameter("videoName");
  3. String videoType=request.getParameter("videoType");
  4. String videoDesc=request.getParameter("videoDesc");
  5. String videoPath=request.getParameter("videoPath");
  6. String picturePath=request.getParameter("picturePath");
  7. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  8. Date uploadTime=null;
  9. try {
  10. uploadTime = formatter.parse(formatter.format(new Date()));
  11. } catch (ParseException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15. JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();
  16. String dataBaseName = "itoo_video";
  17. Video video=new Video();
  18. video.setUserName("why");
  19. video.setUserID("why");
  20. video.setVideoName(videoName);
  21. video.setVideoPath(videoPath);
  22. video.setVideoType(videoType);
  23. video.setVideoDesc(videoDesc);
  24. video.setDataBaseName(dataBaseName);
  25. video.setPicturePath(picturePath);
  26. video.setUploadTime(uploadTime);
  27. uploadFileService.save(video);
  28. jackJsonUtil.beanToJson(response,video);
  29. }
  30. /*
  31. * 上传文件
  32. */
  33. @RequestMapping(value={"/upload"})
  34. @ResponseBody
  35. public void upload( MultipartFile file, HttpServletRequest request,HttpServletResponse response){
  36. String ext_Name = file.getOriginalFilename().split("\\.")[1];
  37. String videoName=file.getOriginalFilename().split("\\.")[0];
  38. byte[] bytes = null;
  39. try {
  40. bytes = file.getBytes();
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. String videoPath=uploadFile(bytes,ext_Name);
  45. JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();
  46. Video video=new Video();
  47. video.setVideoPath(videoPath);
  48. video.setVideoName(videoName);
  49. jackJsonUtil.beanToJson(response,video);
  50. }
  51. public String uploadFile(byte[] byteFile, String ext_file) {
  52. // 拼接服务区的文件路径
  53. StringBuffer sbPath = new StringBuffer();
  54. sbPath.append("http://192.168.22.252");
  55. try {
  56. // 初始化文件资源
  57. ClientGlobal
  58. .init("C:\\Users\\alsr\\Desktop\\ITOO-5.0\\itoo-video-Test\\dmsd-itoo-video-parent\\dmsd-itoo-video-web\\src\\main\\resources\\fdfs_client.conf");
  59. // 链接FastDFS服务器,创建tracker和Stroage
  60. TrackerClient trackerClient = new TrackerClient();
  61. TrackerServer trackerServer = trackerClient.getConnection();
  62. StorageServer storageServer = null;
  63. StorageClient storageClient = new StorageClient(trackerServer,
  64. storageServer);
  65. //利用字节流上传文件
  66. String[] strings = storageClient.upload_file(byteFile, ext_file, null);
  67. for (String string : strings) {
  68. sbPath.append("/" + string);
  69. System.out.println(string);
  70. }
  71. // 全路径
  72. System.out.println(sbPath);
  73. } catch (IOException | MyException e) {
  74. e.printStackTrace();
  75. }
  76. return sbPath.toString();
  77. }

只要我们能正常接收到一个json类型的字符串(url地址),就证明我们已经上传成功了,如果不信,可以直接用浏览器去验证一下,看看能不能得到文件展示。

4、FastDFS实现文件下载:

[java] view plaincopy print?
  1. public void testDownload() {
  2. try {
  3. ClientGlobal.init(conf_filename);
  4. TrackerClient tracker = new TrackerClient();
  5. TrackerServer trackerServer = tracker.getConnection();
  6. StorageServer storageServer = null;
  7. StorageClient storageClient = new StorageClient(trackerServer, storageServer);
  8. byte[] b = storageClient.download_file("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
  9. System.out.println(b);
  10. IOUtils.write(b, new FileOutputStream("D:/"+UUID.randomUUID().toString()+".conf"));
  11. }
  12. catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. }

5、FastDFS获取将上传文件信息:

[java] view plaincopy print?
  1. public void testGetFileInfo(){
  2. try {
  3. ClientGlobal.init(conf_filename);
  4. TrackerClient tracker = new TrackerClient();
  5. TrackerServer trackerServer = tracker.getConnection();
  6. StorageServer storageServer = null;
  7. StorageClient storageClient = new StorageClient(trackerServer, storageServer);
  8. FileInfo fi = storageClient.get_file_info("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
  9. System.out.println(fi.getSourceIpAddr());             System.out.println(fi.getFileSize());
  10. System.out.println(fi.getCreateTimestamp());             System.out.println(fi.getCrc32());
  11. }
  12. catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. }

6、FastDFS获取文件名称:

[java] view plaincopy print?
  1. public void testGetFileMate(){
  2. try {
  3. ClientGlobal.init(conf_filename);
  4. TrackerClient tracker = new TrackerClient();
  5. TrackerServer trackerServer = tracker.getConnection();
  6. StorageServer storageServer = null;
  7. StorageClient storageClient = new StorageClient(trackerServer,
  8. storageServer);
  9. NameValuePair nvps [] = storageClient.get_metadata("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
  10. for(NameValuePair nvp : nvps){
  11. System.out.println(nvp.getName() + ":" + nvp.getValue());
  12. }
  13. }
  14. catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }

7、FastDFS实现删除文件:

[java] view plaincopy print?
  1. public void testDelete(){
  2. try {
  3. ClientGlobal.init(conf_filename);
  4. TrackerClient tracker = new TrackerClient();
  5. TrackerServer trackerServer = tracker.getConnection();
  6. StorageServer storageServer = null;
  7. StorageClient storageClient = new StorageClient(trackerServer,storageServer);
  8. int i = storageClient.delete_file("group1", "M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf");
  9. System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
  10. }
  11. catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }

转载于:https://www.cnblogs.com/DoubleEggs/p/6083465.html

FastDFS实现文件上传下载实战相关推荐

  1. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  2. springboot文件上传下载实战 —— 登录功能、展示所有文件

    springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...

  3. fastdfs实现文件上传下载的通用方法

    首先这里依赖的是: <dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fast ...

  4. SpringMVC整合fastdfs-client-java实现web文件上传下载

    为什么80%的码农都做不了架构师?>>>    版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...

  5. Django实战之文件上传下载

    项目介绍 最近学习django,通过文件上传下载这个小项目,总结下常用的知识点. 做这个案例我有以下需求: 1.要支持一次上传多个文件 2.支持上传后记录上传的数据以及列表展示 3.支持下载和删除文件 ...

  6. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  7. 渗透测试-文件上传/下载/包含

    渗透测试-文件上传/下载/包含 概述 一.常见校验上传文件的方法 客户端校验 服务器端校验 1.校验请求头 content-type字段 2. 正则匹配来判断文件幻数(文件头)内容是否符合要求 3. ...

  8. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  9. 【Java编程系列】Minio实现文件上传下载

    热门系列: [Java编程系列]Amazon S3实现文件上传下载 目录 热门系列: 1.前言 2.Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Mi ...

最新文章

  1. 会员管理scrm系统精细化运营更好促进成交
  2. python3语法错误-python-使用Python 3打印时出现语法错误
  3. 初等数论--同余--MILLER-RABIN素性检测算法
  4. GPTEE中定义的RSA的Algorithm Identifier详解
  5. SQLite 3 一些基本的使用
  6. 最近工程师怎么都在写公众号?这玩意到底能赚多少钱?
  7. 单片机中断机制对日常生活的启示_单片机原理部分课后习题解
  8. mysql innodb row_format_INNODB物理行结构(ROW_FORMAT=COMPACT) | 学步园
  9. Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
  10. (Windows) CodeBlocks 下载
  11. 视频教程 C语言全套视频教程(已更新完毕
  12. 计算机bios设置翻译,bios设置中文翻译的操作教程
  13. rabbitmq,stomp.js,rabbitmq-auth-backend-http,消息调研,消息设计
  14. FLUKE高端时域反射OTDR OFP-100-Q上线
  15. 开源电子书项目FBReader初探(一)
  16. 天大、中南、中山、北师、中科院地图学与地理信息系统GIS及遥感RS专业推免夏令营面试经历与题目汇总
  17. 揪心!河南极端暴雨突袭,多地受灾严重!加油,河南
  18. 走近“领域特定语言”(Domain-Specific Languages)
  19. ZooKeeper知识点整理
  20. 西瓜播放器xgplayer设置自动播放

热门文章

  1. 前端性能优化-CSS性能优化
  2. maven依赖循环引用_maven-2 – Maven命令在本地安装远程依赖项
  3. java 项目 q a 表设计_《JAVA程序设计项目案例训练》期末试卷(A卷)..doc
  4. Maven父工程(统一管理依赖)
  5. 半导体物理载流子浓度计算思考(统计物理的重要应用)
  6. 《打开量化投资的黑箱》 阅读笔记
  7. 一维非稳态对流扩散——显示格式+QUICK格式,左、右边界定壁温的Python程序
  8. python读取数据方法
  9. Opencv边缘检测、轮廓发现、绘制轮廓
  10. C++:团体程序设计天梯赛( 谁先倒)