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

参考博客:http://blog.csdn.net/xyang81/article/details/52847311

官网Java客户端源代码:

https://github.com/happyfish100/fastdfs-client-java

从上面地址下载压缩包,解压

使用idea工具打开执行clean install将包打到本地的maven仓库

如果协同开发,可将该包上传到公司的私服,供大家一起下载,就不需要下载该工程进行本地打包,只需要引pom地址

工程目录结构

根据官方提供的sdk封装了一个工具类

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

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

connect_timeout = 10
network_timeout = 20
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890

tracker_server = 192.168.0.204:22122

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

 1 package com.cky.fastdfsdemo;
 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  * Created by chenkaiyang on 2017/11/30.
12  */
13 public class FastDFSClientTest {
14
15     /**
16      * 文件上传测试
17      */
18     @Test
19     public void testUpload() {
20         File file = new File("F:\\img\\edc.jpg");
21         Map<String,String> metaList = new HashMap<String, String>();
22         metaList.put("width","1024");
23         metaList.put("height","768");
24         metaList.put("author","陈冠希");
25         metaList.put("date","20171130");
26         String fid = FastDFSClient.uploadFile(file,file.getName(),metaList);
27         System.out.println("upload local file " + file.getPath() + " ok, fileid=" + fid);
28         //上传成功返回的文件ID: group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg
29     }
30
31     /**
32      * 文件下载测试
33      */
34     @Test
35     public void testDownload() {
36         int r = FastDFSClient.downloadFile("group1/M00/00/00/wKgAzFogMFKAVgnMAABIYRjp760474.jpg", new File("F:\\cccDownloadFile_fid.jpg"));
37         System.out.println(r == 0 ? "下载成功" : "下载失败");
38     }
39
40     /**
41      * 获取文件元数据测试
42      */
43     @Test
44     public void testGetFileMetadata() {
45         Map<String,String> metaList = FastDFSClient.getFileMetadata("group1/M00/00/00/wKgAzFogMFKAVgnMAABIYRjp760474.jpg");
46         for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
47             Map.Entry<String,String> entry = iterator.next();
48             String name = entry.getKey();
49             String value = entry.getValue();
50             System.out.println(name + " = " + value );
51         }
52     }
53
54     /**
55      * 文件删除测试
56      */
57     @Test
58     public void testDelete() {
59         int r = FastDFSClient.deleteFile("group1/M00/00/00/wKgAzFogMFKAVgnMAABIYRjp760474.jpg");
60         System.out.println(r == 0 ? "删除成功" : "删除失败");
61     }
62 }

获取文件扩展名的工具类

FileUtils

 1 package com.cky.util;
 2
 3 /**
 4  * Created by chenkaiyang on 2017/11/30.
 5  */
 6 public class FileUtil {
 7     /*
 8  * Java文件操作 获取文件扩展名
 9  *
10  *  Created on: 2011-8-2
11  *      Author: blueeagle
12  */
13     public static String getExtensionName(String filename) {
14         if ((filename != null) && (filename.length() > 0)) {
15             int dot = filename.lastIndexOf(‘.‘);
16             if ((dot >-1) && (dot < (filename.length() - 1))) {
17                 return filename.substring(dot + 1);
18             }
19         }
20         return filename;
21     }
22     /*
23      * Java文件操作 获取不带扩展名的文件名
24      *
25      *  Created on: 2011-8-2
26      *      Author: blueeagle
27      */
28     public static String getFileNameNoEx(String filename) {
29         if ((filename != null) && (filename.length() > 0)) {
30             int dot = filename.lastIndexOf(‘.‘);
31             if ((dot >-1) && (dot < (filename.length()))) {
32                 return filename.substring(0, dot);
33             }
34         }
35         return filename;
36     }
37
38 }

pom文件

 <dependency>
      <groupId>org.csource</groupId>
      <artifactId>fastdfs-client-java</artifactId>
      <version>1.27-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>

附送项目地址

时间: 2024-10-28 14:31:03

FastDFS分布文件系统Java客户端集成的相关文章

FastDFS分布文件系统Java客户端使用

原文链接:http://blog.csdn.net/xyang81/article/details/52847311 Java客户端源代码和jar:链接:http://pan.baidu.com/s/1jHIwtsq 密码:n757 我将官方提供的sdk封装了一个工具类,将工具类导入工程即可使用,如下所示: package com.digi_zones.fdfs; import org.apache.commons.io.FileUtils; import org.apache.commons.

FastDFS分布文件系统[转]

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括FastDFS介绍PPT等等. 出于简洁考虑,FastDFS没有对文件做分块存储,因此不太适合分布式计算场景. 官方论坛 http://bbs.chinaunix.net/forum-240-1.html FastDfs google Code http://code.google.com/p/fa

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

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括FastDFS介绍PPT等等. 出于简洁考虑,FastDFS没有对文件做分块存储,因此不太适合分布式计算场景. 源码: http://sourceforge.net/projects/fastdfs/files/ FastDfs google Code http://code.google.com/

JavaWeb项目架构之FastDFS分布式文件系统

概述 分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合中小文件(建议范围:4KB < f

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

http://blog.csdn.net/u012453843/article/details/69951920 http://blog.csdn.net/xyang81/article/details/52847311 http://blog.csdn.net/kingboyworld/article/details/52299602 参考了这几个搭建了FastDFS文件系统 主要是fastDFS,nginx,以及在nginx中加入fastDFS模块:这里只有一台服务器,所以搭建的是单机版的.

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

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

docker安装fastdfs与java客户端测试

一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=tracker -v /home/fastdfs_docker/fdfs/tracker:/data/fast_data --privileged=true --net=host morunchang/fastdfs sh tracker.sh 3.创建并启动storage容器.此处只做单机版测试 注意:由于

FastDFS之java客户端使用

为了方便应用程序的访问FastDFS,官网提供了fastdfs-client-java,以便更好的与应用程序结合使用. 下载fastdfs-client-java源码添加到项目工程里面,添加配置文件:fdfs_client.conf 这个jar包在中央仓库是没有的,我们可以将源码下载下来,使用maven install安装到本地仓库. 附上pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=

上传图片至fastdfs分布式文件系统并回显

事件,当我们浏览完图片选中一张时,触发onchange事件将图片上传到服务器并回显. 1 <img width="100" height="100" id="allUrl" src="${brand.imgUrl }"/> 2 <input type="hidden" name="imgUrl" id="imgUrl" value="${b