介绍

本文讲述如何通过java调用FastDFS的文件上传、下载及删除,提供示例代码。

编译fastdfs-client-java

需要环境git、jdk8、maven

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

cd fastdfs-client-java/

mvn package

配置

target目录中就会产生fastdfs-client-java-x.jar文件

复制该文件到项目中的src/main/resources/lib目录中

添加maven依赖

        <dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/fastdfs-client-java-1.27-SNAPSHOT.jar</systemPath><version>1.27-SNAPSHOT</version></dependency>

resources配置目录下添加配置文件fdfs_client.conf

tracker_server=192.168.81.143:22122

#注意ip和端口要指向服务器的fastdfs服务,如果有防火墙的要做好开放处理

代码实现

-------FastDFSHelper.java

import lombok.extern.slf4j.Slf4j;
import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;@Slf4j
public final class FastDFSHelper {private static TrackerClient trackerClient;static {try {ClientGlobal.init("fdfs_client.conf");trackerClient = new TrackerClient();} catch (IOException | MyException e) {log.error("error", e);}}/*** 向FastDFS上传文件** @param localFilename 本地文件名* @return 上传成功,返回组名和该文件在FastDFS中的名称;上传失败,返回null*/public static String[] uploadFile(String localFilename) {TrackerServer trackerServer;try {trackerServer = trackerClient.getConnection();} catch (IOException e) {log.error("error", e);return null;}StorageClient storageClient = new StorageClient(trackerServer, null);try {String[] arr = storageClient.upload_file(localFilename, null, null);if (arr == null || arr.length != 2) {log.error("向FastDFS上传文件失败");} else {log.info("向FastDFS上传文件成功");log.info("id:{}/{}",arr);return arr;}} catch (IOException | MyException e) {log.error("error", e);} finally {closeTrackerServer(trackerServer);}return null;}/*** 从FastDFS下载文件** @param localFilename  本地文件名* @param groupName      文件在FastDFS中的组名* @param remoteFilename 文件在FastDFS中的名称*/public static boolean downloadFile(String localFilename, String groupName, String remoteFilename) {TrackerServer trackerServer;try {trackerServer = trackerClient.getConnection();} catch (IOException e) {log.error("error", e);return false;}StorageClient storageClient = new StorageClient(trackerServer, null);File file = new File(localFilename);try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {byte[] content = storageClient.download_file(groupName, remoteFilename);if (content == null || content.length == 0) {log.error("文件大小为空!");boolean flag = file.delete();log.info("删除文件结果:{}", flag);return false;}bos.write(content);log.info("成功下载文件: " + localFilename);return true;} catch (IOException | MyException e) {log.error("error", e);} finally {closeTrackerServer(trackerServer);}return false;}/*** 从FastDFS删除文件** @param groupName      文件在FastDFS中的组名* @param remoteFilename 文件在FastDFS中的名称*/public static boolean deleteFile(String groupName, String remoteFilename) {TrackerServer trackerServer;try {trackerServer = trackerClient.getConnection();} catch (IOException e) {log.error("error", e);return false;}StorageClient storageClient = new StorageClient(trackerServer, null);try {int i = storageClient.delete_file(groupName, remoteFilename);if (i == 0) {log.info("FastDFS删除文件成功");return true;} else {log.info("FastDFS删除文件失败");return false;}} catch (IOException | MyException e) {log.error("error", e);} finally {closeTrackerServer(trackerServer);}return false;}private static void closeTrackerServer(TrackerServer trackerServer) {try {if (trackerServer != null) {log.info("关闭trackerServer连接");trackerServer.close();}} catch (IOException e) {log.error("error", e);}}
}

----------FastdfsdemoApplication.java

public class FastdfsdemoApplication {public static void main(String[] args) {String[] arr= FastDFSHelper.uploadFile("/home/whq/a.txt");if(arr!=null){boolean result= FastDFSHelper.downloadFile("/home/whq/a2.txt",arr[0],arr[1]);boolean result2=FastDFSHelper.deleteFile(arr[0],arr[1]);}}
}

参考资料

https://blog.csdn.net/csdlwzy/article/details/83309831

FastDFS java api调用相关推荐

  1. libsvm java 实例_LibSVM Java API调用示例程序

    [实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...

  2. 随机森林 java_机器学习weka,java api调用随机森林及保存模型

    工作需要,了解了一下weka的java api,主要是随机森林这一块,刚开始学习,记录下. 了解不多,直接上demo,里面有一些注释说明: package weka; import java.io.F ...

  3. Java api 调用Sqoop2进行MySQL--Hive的数据同步

    1.相关jar包 2.一些需要的参数定义在message.properties中 jdbcHiveUrl=jdbc:hive2://10.1.9.91:10000 //hive地址jdbcHiveDr ...

  4. java api 调用 kettle 执行etl任务

    关于kettle的maven仓库地址目前只找到这一个可用: https://nexus.pentaho.org/ 转载于:https://www.cnblogs.com/mryangbo/p/1105 ...

  5. 关于Java API不能远程访问HBase的问题

    今天我在虚拟机里面安装了Hbase 1.2.4,说在windows上Java API调用访问下玩玩,结果始终连接不上. 现象是启动程序后,程序出现卡死的状态,没报错也不停止,大约半分钟后才打印一堆日志 ...

  6. java hadoop api_Hadoop 系列HDFS的Java API( Java API介绍)

    HDFS的Java API Java API介绍 将详细介绍HDFS Java API,一下节再演示更多应用. Java API 官网 如上图所示,Java API页面分为了三部分,左上角是包(Pac ...

  7. java连接虚拟机hadoop_本地eclipse java api连接远程虚拟机HBase

    1.本地与远程连通 无论是域名或者ip都可以,另外需保证HBase在虚拟机集群上正常运行. 2.本地要有一个跟远程相同的hadoop环境 当然不相同,只要兼容也可以,现采用hadoop-2.5.0-c ...

  8. Java API文档

    Java API文档 什么是API? API,英文全称:Application Programming Interface,即应用程序编程接口.是一些预先定义的函数,目的是提供应用程序与开发人员基于某 ...

  9. 实时搜索引擎Elasticsearch(5)——Java API的使用

    前一篇有关ES的文章介绍了使用Rest方式调用ES的聚合API.Rest API使用了HTTP协议,按理来说,可以直接使用类似HttpClient的工具直接调用Rest API.虽然笔者并没有尝试过, ...

最新文章

  1. 【论文阅读记录】Real-Time Correlative Scan Matching
  2. VC6.0下调bug的流程
  3. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决
  4. 鼠标划过表格行变色效果JS
  5. Controller 相关注解
  6. Exchange Server 2010核心服务器角色介绍
  7. RabbitMQ笔记-使用rabbitmq-c实现Fair dispatch(公平分发)
  8. UE4 在游戏中使用Slate
  9. html网页商品销量滞后怎么做,iview 刷新滞后于html问题
  10. c语言文件.ppt,c语言 文件.ppt
  11. C语言typedef
  12. Swift中数组字典和plist文件的转换
  13. Modern UI for WPF的使用
  14. c语言编程送小狗回家,【原创】《My Sherlock Ⅱ 》(BY C语言概率论)
  15. 王道学习笔记,计算机网络
  16. Ubuntu_DNS配置过程记录
  17. 杂乱无章之Oracle(一)
  18. 微软的免费杀毒软件!
  19. 谭浩强c++第9章 题9商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。
  20. 一些生活中简单可用的技能--十分钟学会,终生受益

热门文章

  1. 前端学习(2598):按钮控制操作
  2. “约见”面试官系列之常见面试题之第九十四篇之MVVM框架(建议收藏)
  3. 打不开磁盘“D:\CentOS7\CentOS7.vmdk”或它所依赖的某个快照磁盘。
  4. 前端学习(1477):计算属性文档分析
  5. 前端学习(1156):let var const的区别
  6. 前端学习(218):属性选择器
  7. Qt 调用Python引擎混合编程
  8. php直接导出csv,PHP百万级数据导出方案(生成器直接输出单个CSV)
  9. Linux epoll的用法
  10. A的大小是多少c语言中,C/C+中字符(A)的大小