【Fastdfs实战】在本地如何将文件上传到Linux虚拟机
作者:狮子也疯狂
专栏:《Fastdfs连续剧》
坚持做好每一步,幸运之神自然会驾凌在你的身上
目录
- 一. 🦁 前言
- 二. 🦁 上传原理
- Ⅰ. 🐇 原理图解
- Ⅱ. 🐇 传输原理
- 三. 🦁 实战演示
- Ⅰ. 🐇 依赖加载
- Ⅱ. 🐇 编写fastdfs配置
- Ⅲ. 🐇 服务层实现
- 3.1 上传图解
- 3.2 原理步骤
- 3.3 实现代码展示
- 四. 🦁 总结
一. 🦁 前言
我们在做项目的时候,肯定少不了编写文件上传的这个功能,但是在一般上传的文件都是上传到Windows本地,如果需要部署的话,那么我们就得将文件上传到虚拟机,不然会因为写在本地的存储路径,将无法得到存储而报错,狮子之前在做那个校园招聘系统项目的时候,就是没有意识到这个问题,所以部署到虚拟机,上传简历的功能就使用不了了。我们将文件上传到虚拟机的方法有两个:
一、自己搭建一个文件目录,然后在编写代码的过程中,将ip和文件存储地址生成路径返回。
二、狮子介绍一个轻量级分布式文件系统,使用起来比第一个方便一点,并且解决了大数据量存储和负载均衡等问题。如下:

二. 🦁 上传原理
Ⅰ. 🐇 原理图解

Ⅱ. 🐇 传输原理
- 首先,客户端请求`Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求上传文件。
- 存储服务器接收到请求后生产文件,并且将文件内容写入磁盘并返回给客户端file_id、路径信息、文件名等信息。
- 客户端保存相关信息上传完毕。
三. 🦁 实战演示
这里借助于fastdfs集成Nginx服务器,通过Nginx的web服务代理访问分布式文件系统的存储节点,从而实现通过http请求访问存储节点资源。
需要自己在虚拟机或者服务器搭建Fastdfs服务器和Nginx服务器。并且配置好要用的参数。
欲知安装详情,请点击:查看
Ⅰ. 🐇 依赖加载
在Maven POM文件中添加fastdfs依赖。
<!-- FastDFS --><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.5</version></dependency>
Ⅱ. 🐇 编写fastdfs配置
在yaml文件中添加fastdfs连接配置:
fdfs:so-timeout: 3000connect-timeout: 6000tracker-list:- 192.168.66.140:22122fileUrl: 192.168.66.140
tips:
配置参数解释
- so-timeout:读取数据超时间
- connect-timeout:连接超时时间
- tracker-list:跟踪服务器,主要作调度工作,这里是一个数组的形式,表示可以连接多个
- fileUrl:自定义参数配置,文件访问路径
Ⅲ. 🐇 服务层实现
3.1 上传图解

3.2 原理步骤
步骤:
- 获取fastdfs的客户端对象FastFileStorageClient,
- 文件字节数组和文件名作为方法的两个参数。
- 将图片字节数组文件转为字节输出流。获取文件名的后缀名。
- 使用uploadFile()方法将文件上传。
- 返回上传文件成功后的存储路径。
若上传失败,则抛出自定义异常。
3.3 实现代码展示
public class FileServiceImpl implements FileService {@Autowiredprivate FastFileStorageClient fastFileStorageClient;@Value("${fdfs.fileUrl}")private String fileUrl; //Nginx访问fastdfs中文件路径/*** 上传文件** @param fileBytes 文件转成的字节数组* @param fileName 文件名* @return 上传后的文件访问路径*/@Overridepublic String uploadImage(byte[] fileBytes, String fileName){if (fileBytes.length != 0){try {// 1.将字节数组文件转为输入流InputStream inputStream = new ByteArrayInputStream(fileBytes);
// 2.获取文件后缀名String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
// 3.上传文件StorePath storePath = fastFileStorageClient.uploadFile(inputStream, inputStream.available(), fileSuffix, null);
// 4.返回文件路径String imageUrl = fileUrl+"/"+storePath.getFullPath();return imageUrl;}catch (IOException ioException){throw new BusException(CodeEnum.UPLOAD_FILE_ERROR);}}else {throw new BusException(CodeEnum.UPLOAD_FILE_ERROR);}}}
四. 🦁 总结
今天分享如何使用fastdfs上传文件功能,详细描述了上传的原理以及实战演示。希望能够帮到你。😄
相关文章:
【Fastdfs实战】在本地如何将文件上传到Linux虚拟机
作者:狮子也疯狂 专栏:《Fastdfs连续剧》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一. 🦁 前言二. 🦁 上传原理Ⅰ. 🐇 原理图解Ⅱ. 🐇 传输原理三. 🦁 实战演示Ⅰ. &…...
ERP 系统的应用对企业财务会计信息系统内部控制的影响
(一)对企业的财务信息数据进行实时和动态管理传统的财务会计信息系统一般都是采用单一的软件系统,所以在信息的传递及处理上常常不能满足企业的需要,信息与其他部门存在不对称及滞后的现象。而ERP 系统是通过有效的技术手段将企业的各种分散的数据进行完…...
智慧物联网源码带手机端源码 物联网系统源码
在智慧工厂领域,智慧城市领域,都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压,灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台,前端HTML带云组态、可接入视频监…...
AI绘画进军三次元,有人用它打造赛博女友?(diffusion)
目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…...
计算机网络高频知识点
目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...
谈谈前端性能优化-面试版
前言 当我们去面试的时候,很大概率会被面试官问这么一个问题:你有尝试过对项目做性能优化吗?或者你了解哪些性能优化的方法?听到这个问题的你可能是这样的: 似曾相识但又说不清楚,往往只能零散地说出那么几…...
JAVA连接数据库——JDBC的简单使用
JDBC即Java数据库连接.用来实现Java程序对数据库增删查改。 为了对接Java程序和数据库,java.sql提供了很多api包含在java.sql和javax.sql里面 结构: DriverManager接口: 每一个数据库的驱动程序都必须去到DriverManager注册,生成一个Connection Conn…...
Pandas数据查询
Pandas数据查询 Pandas查询数据的几种方法 df.loc方法,根据行、列的标签值查询 df.iloc方法,根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询,又能覆盖写入,强烈推荐! Pandas使用df.loc查询数据…...
NLP-统计词频之处理停用词
前言 本文是该专栏的第1篇,后面会持续分享NLP的各种干货知识,值得关注。 一般来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或者应用服务。 举个例子,如Facebook News Feed这种社交网站推送,它的算法知道你的兴趣是自然语言处理,就会推送相关的广告或者…...
sort 定制排序规则(配合functools.cmp_to_key())
sort 定制排序规则(配合functools.cmp_to_key()) 配合例题学习 题目链接:179. 最大数 题目大意:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意&a…...
【华为OD机试模拟题】用 C++ 实现 - 内存池(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明内存池题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:…...
Python--深入浅出的装饰器--1
本章一起深入浅出一下装饰器。前面我们讲过一章装饰器了。不知道各位看懂了多少。每太看懂也没关系,本章就一起实操一下。简单的例子例1例2上述的两个例子,执行结果为:1423.为什么呢???解析语法糖ÿ…...
如何从0创建Spring Cloud Alibaba(多模块)
以一个父工程带两个Module(test1、test2)为例。 一、创建父工程 由于是模块化项目,那么父工程不需要实际的代码逻辑,因此无需创建src,那么可以有几种方式创建,例如: 使用Spring Initializr脚…...
【华为OD机试模拟题】用 C++ 实现 - 某公司组织招聘(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明招聘 | 某公司组织题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明...
Spring Cloud Sentinel实战(一)- Sentinel介绍
Sentinel介绍 什么是Sentinel 分布式系统的流量防卫兵:随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。 特点: 1. 2…...
基于SpringBoot的任务管理三种方式
文章目录前言一,异步任务1.1 无返回值异步任务调用1.2 有返回值异步任务调用二、定时任务2.1 背景介绍2.2 todo三、邮箱任务3.1 todo前言 开发 web 应用时,多数应用都具备任务调度功能,常见的任务包括异步任务、定时任务和邮件任务。我们以数…...
【华为OD机试模拟题】用 C++ 实现 - 查找单入口空闲区域(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明查找单入口空闲区域题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明示例...
普乐蛙部队vr训练设备军事训练vr体验馆设备元宇宙VR
案例一 地址:北京某部队 内置设备:乐享光轮、VR单车、暗黑战场、VR影院、游艺设备等 内容:部队增加VR体验设备,一、可以在强训练后,进行放松娱乐,也可以锻炼;二、VR设备可以模拟训练场景来进…...
大数据Hadoop教程-学习笔记05【Apache Hive DML语句与函数使用】
视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程 总时长:14:22:04教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大…...
Unity动画转Three.js动画
一:应用场景 在工作中,由于算法给到的动画文件是Unity的.anim格式动画文件,这个格式不能直接在Web端用Three.js引擎运行。因此需要将.anim格式的动画文件转换为Three.js的AnimationClip动画对象。 二:.ANIM格式与AnimationClip对…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

