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

STM32F103C8T6键盘DIY全攻略:从电路设计到固件烧录(附避坑指南)

本文详细介绍了基于STM32F103C8T6微控制器的DIY键盘制作全流程,涵盖硬件电路设计、按键矩阵实现、USB HID通信及固件烧录等关键步骤。特别针对常见问题提供避坑指南,帮助开发者高效完成从电路设计到功能实现的完整过程,打造个性化瀚文键盘。

soda5的博客 770

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

Cadence OrCAD常见引脚错误排查指南:从原理图到封装的完整解决方案

本文详细解析Cadence OrCAD设计中常见的引脚错误问题,提供从原理图到封装的系统化解决方案。涵盖错误诊断、元件库修复、封装管理及自动化处理技巧,帮助工程师高效解决ORCAP-36022等典型错误,确保设计流程顺畅。

weixin_29294975的博客 255

西门子PLC与汇川SV660P伺服速度模式配置实战指南

本文详细介绍了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的配置实战指南。从硬件接线、伺服参数配置到TIA Portal软件组态和PLC程序编写,提供了全面的操作步骤和实用技巧,帮助工程师快速解决伺服系统调试中的常见问题,确保系统稳定运行。

weixin_30316097的博客 498

java中使用FastDFS处理文件

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

weixin_41481806的博客 1129

别再手动算LLC了!用Mathcad 15分钟搞定谐振参数与增益曲线(附已验证产品案例)

本文详细介绍了如何利用Mathcad在15分钟内高效完成LLC谐振变换器的参数计算与增益曲线绘制。通过对比传统工具,突出Mathcad在自然数学表达、实时单位换算和动态参数关联方面的独特优势,帮助电源工程师大幅提升设计效率。文章还提供了已验证的产品案例和实用模板,助力工程师快速掌握谐振参数优化技巧。

weixin_42548888的博客 546

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

ROS2初级面试题汇总

总结和收集了一些关于ros2的问题和解答记录

qq_57633442的博客 5555

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1658

FastDFS配置以及java操作

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

dingcai12003的博客 8170

TI硬件笔试面试题型解析上

摘要: 本专栏聚焦大厂硬件笔试面试题解析,当前第14期以德州仪器(TI)为例,涵盖模拟电路与数字电路核心考点。模拟电路部分涉及最大功率传递定理、运放设计(虚短/虚断)、共模抑制比(CMRR)及高频PCB信号完整性;数字电路包括CMOS与TTL对比、建立/保持时间、竞争冒险消除、D触发器分频及“线与”逻辑实现。文章强调通过例题掌握解题方法与知识点,助力读者应对硬件工程岗位的笔试与面试挑战,附常见考点总结与实用建议。全文注重理论与实践结合,提供典型题型解析与设计思路。(150字)

启芯硬件的博客 950

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

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

一只蚊子学Java 1781

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

全网最详细的YOLOv5源码解读之配置文件yaml。逐行注释,逐句讲解,一文带你了解yaml。小白必看!

路人贾的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

仲夏先森的博客 1038

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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、付费专栏及课程。

余额充值