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.io.IOUtil;
- import org.csource.common.NameValuePair;
- import org.csource.fastdfs.*;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- /**
- * <p>Description: FastDFS文件上传下载工具类 </p>
- * <p>Copyright: Copyright (c) 2016</p>
- *
- * @author yangxin
- * @version 1.0
- * @date 2016/10/19
- */
- public class FastDFSClient {
- private static final String CONFIG_FILENAME = "src/main/resources/fdfs/fdfs_client.conf";
- private static StorageClient1 storageClient1 = null;
- // 初始化FastDFS Client
- static {
- try {
- ClientGlobal.init(CONFIG_FILENAME);
- TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
- TrackerServer trackerServer = trackerClient.getConnection();
- if (trackerServer == null) {
- throw new IllegalStateException("getConnection return null");
- }
- StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
- if (storageServer == null) {
- throw new IllegalStateException("getStoreStorage return null");
- }
- storageClient1 = new StorageClient1(trackerServer,storageServer);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 上传文件
- * @param file 文件对象
- * @param fileName 文件名
- * @return
- */
- public static String uploadFile(File file, String fileName) {
- return uploadFile(file,fileName,null);
- }
- /**
- * 上传文件
- * @param file 文件对象
- * @param fileName 文件名
- * @param metaList 文件元数据
- * @return
- */
- public static String uploadFile(File file, String fileName, Map<String,String> metaList) {
- try {
- byte[] buff = IOUtil.toByteArray(new FileInputStream(file));
- NameValuePair[] nameValuePairs = null;
- if (metaList != null) {
- nameValuePairs = new NameValuePair[metaList.size()];
- int index = 0;
- for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry<String,String> entry = iterator.next();
- String name = entry.getKey();
- String value = entry.getValue();
- nameValuePairs[index++] = new NameValuePair(name,value);
- }
- }
- return storageClient1.upload_file1(buff,FileUtils.getExtension(fileName),nameValuePairs);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 获取文件元数据
- * @param fileId 文件ID
- * @return
- */
- public static Map<String,String> getFileMetadata(String fileId) {
- try {
- NameValuePair[] metaList = storageClient1.get_metadata1(fileId);
- if (metaList != null) {
- HashMap<String,String> map = new HashMap<String, String>();
- for (NameValuePair metaItem : metaList) {
- map.put(metaItem.getName(),metaItem.getValue());
- }
- return map;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 删除文件
- * @param fileId 文件ID
- * @return 删除失败返回-1,否则返回0
- */
- public static int deleteFile(String fileId) {
- try {
- return storageClient1.delete_file1(fileId);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return -1;
- }
- /**
- * 下载文件
- * @param fileId 文件ID(上传文件成功后返回的ID)
- * @param outFile 文件下载保存位置
- * @return
- */
- public static int downloadFile(String fileId, File outFile) {
- FileOutputStream fos = null;
- try {
- byte[] content = storageClient1.download_file1(fileId);
- fos = new FileOutputStream(outFile);
- IOUtil.copy(content,fos);
- return 0;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return -1;
- }
- }
Java客户端配置文件(fdfs_client.conf):
- connect_timeout = 10 # 连接tracker服务器超时时长
- network_timeout = 30 # socket连接超时时长
- charset = UTF-8 # 文件内容编码
- http.tracker_http_port = 8888 # tracker服务器端口
- http.anti_steal_token = no
- http.secret_key = FastDFS1234567890
- tracker_server = 192.168.0.200:22122 # tracker服务器IP和端口(可以写多个)
- #tracker_server = xxxx:xxx
Java客户端文件上传、下载、删除和元数据获取测试:
- package com.digi_zones.fdfs;
- import org.junit.Test;
- import java.io.File;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- /**
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2016</p>
- *
- * @author yangxin
- * @version 1.0
- * @date 2016/10/19
- */
- public class FastDFSClientTest {
- /**
- * 文件上传测试
- */
- @Test
- public void testUpload() {
- File file = new File("C:\\Users\\yangfang\\Pictures\\angularjs_share.jpg");
- Map<String,String> metaList = new HashMap<String, String>();
- metaList.put("width","1024");
- metaList.put("height","768");
- metaList.put("author","杨信");
- metaList.put("date","20161018");
- String fid = FastDFSClient.uploadFile(file,file.getName(),metaList);
- System.out.println("upload local file " + file.getPath() + " ok, fileid=" + fid);
- //上传成功返回的文件ID: group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg
- }
- /**
- * 文件下载测试
- */
- @Test
- public void testDownload() {
- int r = FastDFSClient.downloadFile("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg", new File("DownloadFile_fid.jpg"));
- System.out.println(r == 0 ? "下载成功" : "下载失败");
- }
- /**
- * 获取文件元数据测试
- */
- @Test
- public void testGetFileMetadata() {
- Map<String,String> metaList = FastDFSClient.getFileMetadata("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg");
- for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry<String,String> entry = iterator.next();
- String name = entry.getKey();
- String value = entry.getValue();
- System.out.println(name + " = " + value );
- }
- }
- /**
- * 文件删除测试
- */
- @Test
- public void testDelete() {
- int r = FastDFSClient.deleteFile("group1/M00/00/00/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg");
- System.out.println(r == 0 ? "删除成功" : "删除失败");
- }
- }
FastDFS分布文件系统Java客户端使用的更多相关文章
- FastDFS分布文件系统Java客户端集成
参考博客:http://blog.csdn.net/xyang81/article/details/52847311 官网Java客户端源代码: https://github.com/happyfis ...
- FastDFS分布文件系统[转]
FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...
- FastDFS分布文件系统相关资料索引
FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...
- FastDFS分布文件系统
FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片.视频.文档等文件.对于互联网应用,和其他分布式文件系统相比,优势非常明显.具体情况大家可以看相关的介绍文档,包括 ...
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端
导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐
- FastDFS单机搭建以及java客户端Demo
http://blog.csdn.net/u012453843/article/details/69951920 http://blog.csdn.net/xyang81/article/detail ...
- hadoop系列二:HDFS文件系统的命令及JAVA客户端API
转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...
随机推荐
- Quart2D矩阵变换
如果想让它可以有前面介绍的那种反射变化的效果,在绘图中也是可以的. 一.首先看一下未加任何矩阵变换时的图像 CGContextRef context=UIGraphicsGetCurrentConte ...
- c++语言对c的扩充
1.命名空间的使用 参见下列链接:http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html 需要注意的地方:如果使用了命名空间s ...
- vue-cli中全局组件的注册使用
一.全局注册 在install函数中全局注册组件,没毛病,老铁. 二.其它组件调用 直接在其他 .vue组件中直接写 <popup ref="popup">,然后就可 ...
- 学习Memcached:2基本应用之控制台使用
1.首先新建一个控制台应用. 2.将下载好需要引用的Memcached的Dll导入进来. 3.前期准备工作就结束了,其实很简单,memcache的配置使用是挺简单.下面就是写代码了. using Me ...
- Spring boot实现自定义拦截器
Sprintboot的拦截器提供了精细的控制:在request被响应之前.request被响应之后.request全部结束之后至视图渲染之前 三个时间点,我们都可以通过编写他们的函数来控制. 首先新建 ...
- Java三大特性:封装,继承,多态
java提高篇(一)-----理解java的三大特性之封装 概念: 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独 ...
- python基础训练题1-列表操作
1,在列表末尾添加一个值 >>> l = [ 10, 20 ] >>> l [10, 20] >>> l.append( 'ghostwu' ) ...
- php扩展php-redis安装与使用
一.redis的安装 1,安装redis版本 下载页面:https://redis.io/download 安装一个老版本3.2.11:http://download.redis.io/release ...
- JavaScript--DOM元素尺寸和位置(22)
一 获取元素的CSS大小 1.通过style内联获取元素的大小 var box = document.getElementById('box'); // 获得元素; box.style.width; ...
- avalonjs 实现简单购物车
因为最近有在做购物车,然后我们是用avalon来实现一些模块的,所以顺其自然的用avalon来实现购物车,目前发现avalon还是比较强大的,大大的节约了代码量. 购物车一般具备的功能是加减数量.选择 ...