原文链接:http://blog.csdn.net/xyang81/article/details/52847311

Java客户端源代码和jar:链接:http://pan.baidu.com/s/1jHIwtsq 密码:n757

我将官方提供的sdk封装了一个工具类,将工具类导入工程即可使用,如下所示:

  1. package com.digi_zones.fdfs;
  2.  
  3. import org.apache.commons.io.FileUtils;
  4. import org.apache.commons.io.IOUtil;
  5. import org.csource.common.NameValuePair;
  6. import org.csource.fastdfs.*;
  7.  
  8. import java.io.File;
  9. import java.io.FileInputStream;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.util.HashMap;
  13. import java.util.Iterator;
  14. import java.util.Map;
  15.  
  16. /**
  17. * <p>Description: FastDFS文件上传下载工具类 </p>
  18. * <p>Copyright: Copyright (c) 2016</p>
  19. *
  20. * @author yangxin
  21. * @version 1.0
  22. * @date 2016/10/19
  23. */
  24. public class FastDFSClient {
  25.  
  26. private static final String CONFIG_FILENAME = "src/main/resources/fdfs/fdfs_client.conf";
  27.  
  28. private static StorageClient1 storageClient1 = null;
  29.  
  30. // 初始化FastDFS Client
  31. static {
  32. try {
  33. ClientGlobal.init(CONFIG_FILENAME);
  34. TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
  35. TrackerServer trackerServer = trackerClient.getConnection();
  36. if (trackerServer == null) {
  37. throw new IllegalStateException("getConnection return null");
  38. }
  39.  
  40. StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
  41. if (storageServer == null) {
  42. throw new IllegalStateException("getStoreStorage return null");
  43. }
  44.  
  45. storageClient1 = new StorageClient1(trackerServer,storageServer);
  46.  
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. }
  51.  
  52. /**
  53. * 上传文件
  54. * @param file 文件对象
  55. * @param fileName 文件名
  56. * @return
  57. */
  58. public static String uploadFile(File file, String fileName) {
  59. return uploadFile(file,fileName,null);
  60. }
  61.  
  62. /**
  63. * 上传文件
  64. * @param file 文件对象
  65. * @param fileName 文件名
  66. * @param metaList 文件元数据
  67. * @return
  68. */
  69. public static String uploadFile(File file, String fileName, Map<String,String> metaList) {
  70. try {
  71. byte[] buff = IOUtil.toByteArray(new FileInputStream(file));
  72. NameValuePair[] nameValuePairs = null;
  73. if (metaList != null) {
  74. nameValuePairs = new NameValuePair[metaList.size()];
  75. int index = 0;
  76. for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
  77. Map.Entry<String,String> entry = iterator.next();
  78. String name = entry.getKey();
  79. String value = entry.getValue();
  80. nameValuePairs[index++] = new NameValuePair(name,value);
  81. }
  82. }
  83. return storageClient1.upload_file1(buff,FileUtils.getExtension(fileName),nameValuePairs);
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. return null;
  88. }
  89.  
  90. /**
  91. * 获取文件元数据
  92. * @param fileId 文件ID
  93. * @return
  94. */
  95. public static Map<String,String> getFileMetadata(String fileId) {
  96. try {
  97. NameValuePair[] metaList = storageClient1.get_metadata1(fileId);
  98. if (metaList != null) {
  99. HashMap<String,String> map = new HashMap<String, String>();
  100. for (NameValuePair metaItem : metaList) {
  101. map.put(metaItem.getName(),metaItem.getValue());
  102. }
  103. return map;
  104. }
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. }
  108. return null;
  109. }
  110.  
  111. /**
  112. * 删除文件
  113. * @param fileId 文件ID
  114. * @return 删除失败返回-1,否则返回0
  115. */
  116. public static int deleteFile(String fileId) {
  117. try {
  118. return storageClient1.delete_file1(fileId);
  119. } catch (Exception e) {
  120. e.printStackTrace();
  121. }
  122. return -1;
  123. }
  124.  
  125. /**
  126. * 下载文件
  127. * @param fileId 文件ID(上传文件成功后返回的ID)
  128. * @param outFile 文件下载保存位置
  129. * @return
  130. */
  131. public static int downloadFile(String fileId, File outFile) {
  132. FileOutputStream fos = null;
  133. try {
  134. byte[] content = storageClient1.download_file1(fileId);
  135. fos = new FileOutputStream(outFile);
  136. IOUtil.copy(content,fos);
  137. return 0;
  138. } catch (Exception e) {
  139. e.printStackTrace();
  140. } finally {
  141. if (fos != null) {
  142. try {
  143. fos.close();
  144. } catch (IOException e) {
  145. e.printStackTrace();
  146. }
  147. }
  148. }
  149. return -1;
  150. }
  151.  
  152. }

Java客户端配置文件(fdfs_client.conf):

  1. connect_timeout = 10 # 连接tracker服务器超时时长
  2. network_timeout = 30 # socket连接超时时长
  3. charset = UTF-8 # 文件内容编码
  4. http.tracker_http_port = 8888 # tracker服务器端口
  5. http.anti_steal_token = no
  6. http.secret_key = FastDFS1234567890
  7.  
  8. tracker_server = 192.168.0.200:22122 # tracker服务器IP和端口(可以写多个)
  9. #tracker_server = xxxx:xxx

Java客户端文件上传、下载、删除和元数据获取测试

  1. package com.digi_zones.fdfs;
  2.  
  3. import org.junit.Test;
  4.  
  5. import java.io.File;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.Map;
  9.  
  10. /**
  11. * <p>Description: </p>
  12. * <p>Copyright: Copyright (c) 2016</p>
  13. *
  14. * @author yangxin
  15. * @version 1.0
  16. * @date 2016/10/19
  17. */
  18. public class FastDFSClientTest {
  19.  
  20. /**
  21. * 文件上传测试
  22. */
  23. @Test
  24. public void testUpload() {
  25. File file = new File("C:\\Users\\yangfang\\Pictures\\angularjs_share.jpg");
  26. Map<String,String> metaList = new HashMap<String, String>();
  27. metaList.put("width","1024");
  28. metaList.put("height","768");
  29. metaList.put("author","杨信");
  30. metaList.put("date","20161018");
  31. String fid = FastDFSClient.uploadFile(file,file.getName(),metaList);
  32. System.out.println("upload local file " + file.getPath() + " ok, fileid=" + fid);
  33. //上传成功返回的文件ID: group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg
  34. }
  35.  
  36. /**
  37. * 文件下载测试
  38. */
  39. @Test
  40. public void testDownload() {
  41. int r = FastDFSClient.downloadFile("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg", new File("DownloadFile_fid.jpg"));
  42. System.out.println(r == 0 ? "下载成功" : "下载失败");
  43. }
  44.  
  45. /**
  46. * 获取文件元数据测试
  47. */
  48. @Test
  49. public void testGetFileMetadata() {
  50. Map<String,String> metaList = FastDFSClient.getFileMetadata("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg");
  51. for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
  52. Map.Entry<String,String> entry = iterator.next();
  53. String name = entry.getKey();
  54. String value = entry.getValue();
  55. System.out.println(name + " = " + value );
  56. }
  57. }
  58.  
  59. /**
  60. * 文件删除测试
  61. */
  62. @Test
  63. public void testDelete() {
  64. int r = FastDFSClient.deleteFile("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg");
  65. System.out.println(r == 0 ? "删除成功" : "删除失败");
  66. }
  67. }

FastDFS分布文件系统Java客户端使用的更多相关文章

  1. FastDFS分布文件系统Java客户端集成

    参考博客:http://blog.csdn.net/xyang81/article/details/52847311 官网Java客户端源代码: https://github.com/happyfis ...

  2. FastDFS分布文件系统[转]

    FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...

  3. FastDFS分布文件系统相关资料索引

    FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...

  4. FastDFS分布文件系统

    FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...

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

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

  6. Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)

    文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...

  7. 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端

    导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐

  8. FastDFS单机搭建以及java客户端Demo

    http://blog.csdn.net/u012453843/article/details/69951920 http://blog.csdn.net/xyang81/article/detail ...

  9. hadoop系列二:HDFS文件系统的命令及JAVA客户端API

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

随机推荐

  1. Quart2D矩阵变换

    如果想让它可以有前面介绍的那种反射变化的效果,在绘图中也是可以的. 一.首先看一下未加任何矩阵变换时的图像 CGContextRef context=UIGraphicsGetCurrentConte ...

  2. c++语言对c的扩充

    1.命名空间的使用 参见下列链接:http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html 需要注意的地方:如果使用了命名空间s ...

  3. vue-cli中全局组件的注册使用

    一.全局注册 在install函数中全局注册组件,没毛病,老铁. 二.其它组件调用 直接在其他  .vue组件中直接写 <popup ref="popup">,然后就可 ...

  4. 学习Memcached:2基本应用之控制台使用

    1.首先新建一个控制台应用. 2.将下载好需要引用的Memcached的Dll导入进来. 3.前期准备工作就结束了,其实很简单,memcache的配置使用是挺简单.下面就是写代码了. using Me ...

  5. Spring boot实现自定义拦截器

    Sprintboot的拦截器提供了精细的控制:在request被响应之前.request被响应之后.request全部结束之后至视图渲染之前 三个时间点,我们都可以通过编写他们的函数来控制. 首先新建 ...

  6. Java三大特性:封装,继承,多态

    java提高篇(一)-----理解java的三大特性之封装 概念: 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独 ...

  7. python基础训练题1-列表操作

    1,在列表末尾添加一个值 >>> l = [ 10, 20 ] >>> l [10, 20] >>> l.append( 'ghostwu' ) ...

  8. php扩展php-redis安装与使用

    一.redis的安装 1,安装redis版本 下载页面:https://redis.io/download 安装一个老版本3.2.11:http://download.redis.io/release ...

  9. JavaScript--DOM元素尺寸和位置(22)

    一 获取元素的CSS大小 1.通过style内联获取元素的大小 var box = document.getElementById('box'); // 获得元素; box.style.width; ...

  10. avalonjs 实现简单购物车

    因为最近有在做购物车,然后我们是用avalon来实现一些模块的,所以顺其自然的用avalon来实现购物车,目前发现avalon还是比较强大的,大大的节约了代码量. 购物车一般具备的功能是加减数量.选择 ...