正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现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文件

  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底下)

  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、实现文件上传:

  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实现文件下载:

  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获取将上传文件信息:

  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获取文件名称:

  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实现删除文件:

    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. }

FastDFS实现文件上传下载实战的更多相关文章

  1. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

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

    原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...

  3. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  4. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  5. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  6. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  7. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  8. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  9. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...

随机推荐

  1. Innodb锁机制:Next-Key Lock 浅谈

    数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性.InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S).排他锁(X).意向共享(IS).意向排他(IX).为了提供更好的并发,Inn ...

  2. MongoDB 副本集的相关概念【转】

    一.副本集基本概念 副本集(replica set) MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换. MongoDB的数据库复制增加了 ...

  3. springMVC中ajax的使用

    springMVC中使用ajax有两种方法,第一种是根据servletAPI来使用ajax,第二种是根据springMVC给我们提供的API来使用. 一.根据servletAPI: springMVC ...

  4. Maven 3.3.3 Win10环境下的使用实例(上)

    Maven是一个项目管理和构建自动化工具,在使用之前,请按照Apache官网提供的指南进行环境变量配置. 完成后在PowerShell中输入如下命令来验证Maven的部署情况: mvn -v 正常的响 ...

  5. ecshop修改后台访问地址

    本文转自‘做个好男人’的博客. 打开data/config.php,找到define(’ADMIN_PATH’,’admin’),这里是定义后台目录的地方,把其中的admin换成你的后台自定义目录,如 ...

  6. 常见kill信号

    字符名 数字名 组合键ctrl+ 备注 SIGTERM 15   kill的默认值,可以杀死后台进程 SIGKILL 9   不可忽略,必杀技 SIGTSTP 20 Z 前台组全暂停(只是组合键方式吧 ...

  7. VB兼容问题

    window7 64位无法显示打印窗问题 在Windows7 64位和VS2008环境下,PrintDialog.ShowDialog不能显示打印对话框 在VS2008中编写?如下代码: PrintD ...

  8. Centos7 ZooKeeper 安装过程

    www.apache.org/dist/上可以下载Hadoop整个生态环境的组件,我下的Zookeeper3.4.6版本 我一般都是在一个虚拟机上将一.二步都做完,然后克隆出来,再到克隆出来的虚拟机上 ...

  9. 360极速浏览器安装.crx扩展(postman)

    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...

  10. JVM内存区域与内存溢出异常

    Java虚拟机在执行java程序时会把它所管理的内存会分为若干个不同的数据区域,不同的区域在内存不足时会抛出不同的异常. >>运行时数据区域的划分 (1)程序计数器程序计数器(Progra ...