FastDFS通过java上传文件到服务器

服务器fastdfs java 文件上传测试 github 地址:https://github.com/tobato/FastDFS_Client pom.xml 代码: xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.phpfzh2 spring-b 阅读详情

GitHub原文地址点击进入
#一、FastDFS简介及系统环境搭建:点击进入
#二、FastDFS 配置 Nginx 模块及访问测试:点击进入
#三、FastDFS使用流程介绍:
我们在项目中使用fastdfs+nginx+mysql实现上传附件的功能,主要原理就是将附件上传到fastdfs得到一个文件的链接路径url,我们获取到这个url将他以字符串形式保存到我们的mysql中,下载的时候获取到这个url直接打开或者下载附件
这里写图片描述这里写图片描述
#四、实现代码:
1,配置依赖:因为我们使用的maven来管理工程,所以我们需要去添加pom文件依赖

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

注意:由于fastdfs-client-java jar包没有上传到中央仓库,所以需要下载源码进行maven编译再上传到私服,然后通过私服下载,具体流程参照步骤一,或者通过jar包的形式进行下载:
下载地址:点击进入

2,配置信息:我这里是配置在 application.properties 文件中的

#FastDFS配置begin-----------除了fastdfs.tracker_servers,其它配置项都是可选的
fastdfs.connect_timeout_in_seconds=5
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890
fastdfs.http_tracker_http_port=8070
fastdfs.tracker_servers=192.168.2.200:22122
#FastDFS配置end-----------

这里写图片描述
3,具体实现代码:

/**
  * 上传文件到FastDFS
  *
  * @param file
  */
 @RequestMapping(value = "/fastDFSUpload", method = RequestMethod.POST)
 @ResponseBody
 public void fastDFSUpload(MultipartFile file) {

     String ext_Name = file.getOriginalFilename().split("\\.")[1];
     String file_Name = file.getOriginalFilename().split("\\.")[0];

     byte[] bytes = null;
     try {
         bytes = file.getBytes();
     } catch (IOException e) {
         e.printStackTrace();
     }

     String filePath= uploadFile(bytes, ext_Name, file_Name);
 }

 /**
  * FastDFS实现文件下载
  *
  * @param filePath
  */
 @RequestMapping(value = "/fastDFSDownload", method = RequestMethod.GET)
 @ResponseBody
 public void fastDFSDownload(String filePath) {
     try {
         ClientGlobal.initByProperties("application.properties");

         // 链接FastDFS服务器,创建tracker和Stroage
         TrackerClient trackerClient = new TrackerClient();
         TrackerServer trackerServer = trackerClient.getConnection();

         String storageServerIp = getStorageServerIp(trackerClient, trackerServer);
         StorageServer storageServer = getStorageServer(storageServerIp);
         StorageClient storageClient = new StorageClient(trackerServer, storageServer);
         byte[] b = storageClient.download_file("group1", filePath);
         if (b == null) {
             throw new IOException("文件" + filePath + "不存在");
         }

         String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
         FileOutputStream fileOutputStream = new FileOutputStream("c://" + fileName);
         IOUtils.write(b, fileOutputStream);
         fileOutputStream.close();
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

 /**
  * FastDFS获取将上传文件信息
  */
 @RequestMapping(value = "/fastDFSGetFileInfo", method = RequestMethod.GET)
 @ResponseBody
 public void fastDFSGetFileInfo(String filePath) {
     try {
         // 链接FastDFS服务器,创建tracker和Stroage
         ClientGlobal.initByProperties("application.properties");
         TrackerClient trackerClient = new TrackerClient();
         TrackerServer trackerServer = trackerClient.getConnection();

         String storageServerIp = getStorageServerIp(trackerClient, trackerServer);
         StorageServer storageServer = getStorageServer(storageServerIp);
         StorageClient storageClient = new StorageClient(trackerServer, storageServer);

         FileInfo fi = storageClient.get_file_info("group1", filePath);
         if (fi == null) {
             throw new IOException("文件" + filePath + "不存在");
         }

         log.debug("文件信息=" + fi.toString());
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

 /**
  * FastDFS获取文件名称
  */
 @RequestMapping(value = "/fastDFSGetFileName", method = RequestMethod.GET)
 @ResponseBody
 public void fastDFSGetFileName(String filePath) {
     try {
         // 链接FastDFS服务器,创建tracker和Stroage
         ClientGlobal.initByProperties("application.properties");
         TrackerClient trackerClient = new TrackerClient();
         TrackerServer trackerServer = trackerClient.getConnection();

         String storageServerIp = getStorageServerIp(trackerClient, trackerServer);
         StorageServer storageServer = getStorageServer(storageServerIp);
         StorageClient storageClient = new StorageClient(trackerServer, storageServer);

         NameValuePair[] nvps = storageClient.get_metadata("group1", filePath);
         if (nvps == null) {
             throw new IOException("文件" + filePath + "不存在");
         }

         log.debug(nvps[0].getName() + "." + nvps[0].getValue());
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

 /**
  * FastDFS实现删除文件
  */
 @RequestMapping(value = "/fastDFSDelete", method = RequestMethod.GET)
 @ResponseBody
 public void fastDFSDelete(String filePath) {
     try {
         // 链接FastDFS服务器,创建tracker和Stroage
         ClientGlobal.initByProperties("application.properties");
         TrackerClient trackerClient = new TrackerClient();
         TrackerServer trackerServer = trackerClient.getConnection();

         String storageServerIp = getStorageServerIp(trackerClient, trackerServer);
         StorageServer storageServer = getStorageServer(storageServerIp);
         StorageClient storageClient = new StorageClient(trackerServer, storageServer);

         int i = storageClient.delete_file("group1", filePath);
         log.debug(i == 0 ? "删除成功" : "删除失败:" + i);
     } catch (Exception e) {
         e.printStackTrace();
     }
 }

 public String uploadFile(byte[] byteFile, String ext_file, String file_Name) {

     // 拼接服务区的文件路径
     StringBuffer sbPath = new StringBuffer();
     sbPath.append("http://192.168.2.200/uploads/");
     try {
         // 初始化文件资源
         ClientGlobal.initByProperties("application.properties");

         // 链接FastDFS服务器,创建tracker和Stroage
         TrackerClient trackerClient = new TrackerClient();
         TrackerServer trackerServer = trackerClient.getConnection();

         String storageServerIp = getStorageServerIp(trackerClient, trackerServer);
         StorageServer storageServer = getStorageServer(storageServerIp);
         StorageClient storageClient = new StorageClient(trackerServer, storageServer);

         //利用字节流上传文件
//            NameValuePair[] nvps = new NameValuePair[1];
//            nvps[0] = new NameValuePair(file_Name, ext_file);
         String[] strings = storageClient.upload_file(byteFile, ext_file, null);

         sbPath.append(StrUtil.join("/", strings));
         log.debug("上传路径=" + sbPath.toString());
     } catch (IOException | MyException e) {
         e.printStackTrace();
     }
     return sbPath.toString();
 }

 /**
  * 得到Storage服务
  *
  * @param storageIp
  * @return 返回Storage服务
  */
 private static StorageServer getStorageServer(String storageIp) {
     StorageServer storageServer = null;
     if (storageIp != null && !("").equals(storageIp)) {
         try {
             // ip port store_path下标
             storageServer = new StorageServer(storageIp, 23000, 1);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     log.debug("——storage server生成");
     return storageServer;
 }

 /**
  * 获得可用的storage IP
  *
  * @param trackerClient
  * @param trackerServer
  * @return 返回storage IP
  */
 private static String getStorageServerIp(TrackerClient trackerClient, TrackerServer trackerServer) {
     String storageIp = null;
     if (trackerClient != null && trackerServer != null) {
         try {
             StorageServer storageServer = trackerClient.getStoreStorage(trackerServer, "group1");
             storageIp = storageServer.getSocket().getInetAddress().getHostAddress();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     log.debug("——获取组中可用的storage IP——" + storageIp);
     return storageIp;
 }

#五、效果查看
这里写图片描述
直接就可以集成swagger通过api接口上传文件了,搭建好nginx环境后可以通过返回的url路径访问上传的文件,别的就不再一一演示了,自己去查看效果吧

服务器安装部署FastDFS+Nginx实现文件服务器 FastDFS+Nginx实现文件服务器一、介绍1.Tracker 集群2.Storage集群上传流程二、安装部署FastDFS1.安装gcc环境2.安装linevent库3.安装libfastcommon4.安装fastDFS1. 解压安装包2.编译3.安装4.复制conf文件5.创建软连接5.修改tracker配置文件6.启动tracker7.修改storage配置文件8.启动storage三、安装部署Nginx1.安装gcc环境2.安装pcre3.安装openssl库4.解压nginx压缩包5.启动n 阅读详情

相关推荐

FastDFS+Nginx实现文件服务器

安装FastDFS环境 0、前言 操作环境:CentOS7 X64,以下操作都是单机环境。 我把所有的安装包下载到/softpackages/下,解压到当前目录。 先做一件事,修改hosts,将文件服务器的ip与域名映射(单机TrackerServer环境),因为后面很多配置里面都需要去配置服务器地址,ip变了,就只需要修改hosts即可。 # vim /etc/hosts 增加...

沐宇熙IT成长之路 1万+

SpringBoot集成FastDFS的配合

最近做的项目需要把相关的录音文件上传到FastDFS服务器,因为之前没有做过,所以都是在网上找一些资源做参考,最后经过调试,终于可以上传成功了,接下来我来和大家分享我写的相关代码,其他就不讲解了,希望能做到大家参考着也能配置成功,在项目中使用: 1、首先添加maven的依赖 <dependency> <groupId>net.o...

朝阳大司马 1751

2023年金蝶云星辰初级顾问认证参考试题(1)

最新积累的考试真题,答案只供参考(49分T~T),欢迎大佬们更正,私聊我修改,有新的试题也可以私聊我,日后会完善题库!大家一起努力,预祝大家顺利通过!1.【简单】生产环节中,客户老板希望掌握材料的超发或漏发情况,,以便分析用料情况,对材料浪费进行管控,可以查看什么报表?⒉[中等】客户主营电气柜的生产销售,商品为非标品需定制,又因交期效短,需要边生产边补料,以下哪个功能最适合该客户场景?15.【简单】在给商品设置科目关联时,分别按照单个商品,商品类别,所有商品设置了对应客户,()优先级最高。

MLX00的博客 7964

fastdfs文件上传java--根据网络io流上传-避免Connection reset by peer: socket write error

1:添加依赖 net.oschina.zcx7878 fastdfs-client-java 1.27.0.0 2:配置config.conf  里面可以只配置tracker的地址和端口 tracker_server=192.168.0.180:22122 3:编写代码 3.1编写UploadF

yzh20170720的博客 5743

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

Java开发者必看:WPS Office在线预览接入实战(含回调配置避坑指南)

本文为Java开发者提供了WPS Office在线预览功能的完整接入实战指南。详细解析了从服务申请、生成带签名的访问URL,到实现核心回调接口(文件信息、用户信息、文件保存)的全流程,并重点分享了签名算法与回调配置中的关键避坑点,帮助开发者高效集成,提升Web应用文档处理体验。

vodka的博客 1328

java中使用FastDFS处理文件

1.pom文件直接引入依赖是下载不下来的 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27-SNAPSHOT</ver...

weixin_41481806的博客 1129

无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序

时差估计算法之精确时差估计(ETDE)欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想

伊谢尔伦的林中小路 4254

FastDFS安装步骤以及SpringBoot集成fastdfs-client-java

1、前期准备2、CentOS添加编译环境 yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y 二、磁盘目录 mkdir -p /usr/local/soft #所有安装包目录mkdir -p /data/fastdfs #数据存储位置cd /usr/local/soft git clone https://github.co

查查攻城狮 4287

前端监控性能指标

文章目录前端监控性能指标性能指标阶段性指标关键性能指标小程序W3C Level 1兼容性常规用法注意事项1、计算HTML文档请求使用 Nav Timing2、计算静态资源使用 getEntriesByType('resource') 代替 getEntries()3、secureConnectionStart 问题4、跨域资源设置响应头 Timing-Allow-Origin5、注意属性值为 0 ...

foolbird 1347

【OCPP】ocpp1.6协议3.3章节:功能配置文件及接口

Smart Charging Profile中定义了4个接口请求,即GetCompositeSchedule、ClearChargingProfile、SetChargingProfile和ClearCache等。Smart Charging: 包含智能充电相关的功能,如计划充电,报告充电计划,并改变充电速度。Core: 包含电动汽车充电相关的基础功能,如启动和停止充电,更改充电配置,报告充电状态等。Reservation: 包含预约服务相关的功能,如创建,取消和更改预约。

qq_53871375的博客 2170

FastDFS配置以及java操作

综合介绍 内容介绍 FastDFS是由淘宝的余庆先生所开发,是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。同类的分布式文件系统有谷歌的GFS、HD...

dingcai12003的博客 8170

YOLO11优化:TGRS2026 CKConv结合C3k2 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

多尺度适配小目标尺寸变化:在 C3k2 不同阶段配置 CKConv 不同核尺度(浅层小核捕获精细纹理,深层大核聚合上下文),兼顾局部细节与全局感知,提升对舰船、车辆等小尺寸目标及红外热目标的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 564

自己搭建FastDFS文件服务器,通过java上传文件(springboot)

目前项目(springboot)中使用的文件及图片较多,决定自己搭建一个文件服务器用来存储文件,经过参考多个文章搭建成功,遂写下此教程分享给大家:   Linux系统:Centos 6.5   FastDFS开源地址:https://github.com/happyfish100,下载最新的:fastdfs-master、libfastcommon-master、fastdfs-nginx-m...

一只蚊子学Java 1781

用 PERFORM ... ON COMMIT / ON ROLLBACK 把收尾工作做干净:从 SAP LUW 到 Update Task 的事务钩子实践

ABAP事务钩子机制解析 本文深入探讨SAP ABAP开发中的事务边界管理问题,重点分析PERFORM ... ON COMMIT/ROLLBACK机制: 事务分层:区分Database LUW(数据库提交)和SAP LUW(业务逻辑单元),后者通过COMMIT WORK触发多种收尾动作 钩子机制:PERFORM...ON COMMIT将子程序注册为事务结束回调,在提交/回滚时执行清理工作而非业务更新 执行顺序:钩子程序先于Update Task执行,仍保留当前会话内存上下文 现代实践:建议将FORM仅作为

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3993

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java开发在go-fastdfs文件服务器上传和删除文件。

最近在项目开发时候需要上传人员人脸照片至文件服务器go-fastdfs上,通过阅读官方文档:https://sjqzhang.github.io/go-fastdfs/#character,根据常规需求场景写了如下两个工具类方法,以供参考。 public class FileUtil { public static Response uploadFile(String domain, String group, String path, MultipartFile file) {...

qq_42401622的博客 2919

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

FastDFS通过java上传文件到linux服务器,通过nginx进行查看

转载:https://blog.youkuaiyun.com/u012946310/article/details/81567320

仲夏先森的博客 1038

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java集成fastdfs-client上传文件到服务器

1、在pom文件中添加依赖 <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </d...

wangfulong91的博客 537

使用java把图片上传到fastdfs文件服务器中

weixin_42868206的博客 1053

Java操作FastDFS(电子影像文件上传、下载、删除)用法详解

本文主要详细介绍对于Java如何操作FastDFS进行电子影像文件上传、下载、删除的用法。

1加1等于的博客 870

fastdfs上传文件_使用FastDFS+Nginx实现文件服务器

FastDFS+Nginx实现文件服务器一、介绍1.Tracker 集群2.Storage集群上传流程二、安装部署FastDFS1.安装gcc环境2.安装linevent库3.安装libfastcommon4.安装fastDFS1. 解压安装包2.编译3.安装4.复制conf文件5.创建软连接5.修改tracker配置文件6.启动tracker7.修改storage配置文件8.启动sto...

weixin_39531582的博客 449

java程序下载PDF文件并上传自己FastDFS服务器

下载第三方.pdf文件,只需提供第三方下载地址即可 package cn.itcast; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; pu...

weixin_39709686的博客 1868

Java Springboot结合FastDFS实现文件上传以及根据图片url将图片上传至图片服务器

上一篇文章我们已经讲解了如何搭建FastDFS图片服务器,环境我们准备好了现在就让我们开始与Java结合将他应用到实际的项目中吧。本篇文章我们将会展示上传图片到FastDFS图片服务器以及通过外网的图片url将图片上传至我们自己的图片服务器中。 1.创建springboot项目 首先我们创建一个最基础的springboot项目,如果不了解springboot的同学可以先阅读 java 搭建基于s

beyondLi71的博客 7575

CentOS 7搭建FastDFS分布式文件服务器实现文件上传

        好长时间没写博客了,这两天一直在捣鼓FastDFS这个玩意,因为之前接了老师的一个任务,说让我写一个通用的企业网站的模板,我的设计是实现网站图片的统一化管理,前台页面动态生成,所以就研究了一下阿里的FastDFS这个小型的文件管理系统。 FastDFS     &...

羽枫760的博客 914

FastDFS文件服务器常见问题???

FastDFS文件服务器相关bug

2201_75443958的博客 950

阿里云服务器上部署fastDFS文件服务器,java客户端上传一直超时问题

问题:fastDFS安装后,本地上传没问题,安装整合nginx,浏览器其也可以访问。防火墙也设置开放22122,23000端口,但通过java客户端访问一直超时。 最后发现是因为storage.conf文件中,配置tracker_server的ip地址,设置成阿里云内网的ip,导致上传超时。 通过java客户端访问时,是需要通过公网地址来访问上传。 ...

zhangyongbink的博客 639
上一篇: FastDFS 配置 Nginx 模块及访问测试
下一篇: FastDFS结合Nginx Image 模块使用缩略图
hwmhehe
博客等级 码龄13年 86粉丝 106原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值