【Fastdfs实战】在本地如何将文件上传到Linux虚拟机

news/2025/2/4 20:32:10/

作者:狮子也疯狂
专栏:《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上传文件功能,详细描述了上传的原理以及实战演示。希望能够帮到你。😄


http://www.ppmy.cn/news/28547.html

相关文章

k8s新增节点机器,无法拉取和推送镜像的解决方案

1、首先检查配置&#xff0c;查看镜像仓库是否已授权&#xff0c;若无授权&#xff0c;则进行授权。 命令&#xff1a;cat /etc/systemd/system/docker.service.d/docker-options.conf内容如果有这样一句就是已经授权&#xff0c;如果没有&#xff0c;就需要把这句加进去&…

【正点原子FPGA连载】第二十章AXI4接口之DDR读写实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十章AXI4接口…

观测云产品更新|新增用户访问监测自动化追踪;新增 CDN 质量分析;新增自定义查看器导航菜单等

观测云更新 用户访问监测优化 新增用户访问监测自动化追踪 用户访问监测新增自动化追踪&#xff0c;通过“浏览器插件”的实现方式&#xff0c;使用浏览器记录用户访问行为&#xff0c;创建无代码的端到端测试。更多详情可参考文档【 自动化追踪 】https://docs.guance.com/…

Vue基础:el挂载点,data数据

目录 1、el&#xff1a;挂载点 2、data数据对象 1、el&#xff1a;挂载点 Vue实例的作用范围是什么呢? Vue会管理el选项命中的元素及其内部的后代元素 是否可以使用其他的选择器? 可以使用其他的选择器,但是建议使用ID选择器 是否可以设置其他的dom元素呢? 可以使用其…

【C++】list 相关接口的模拟实现

list 模拟实现回顾准备构造析构函数的构造构造方法析构方法赋值运算符重载容量相关接口元素获取元素修改相关接口push 、popinserterase清空交换迭代器 **&#xff08;重点&#xff09;迭代器基本概念迭代器模拟实现回顾 在上一篇博客中我们大致了解了 list 相关接口的使用方法…

Java单元测试浅析(JUnit+Mockito)

Java测试我们应该都遇到过&#xff0c;一般我们会被要求做单元测试&#xff0c;来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 什么是单元测试&#xff1f; 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义&#xff0c;一般…

一文搞懂Python时间序列

Python时间序列1. datetime模块1.1 datetime对象1.2 字符串和datatime的相互转换2. 时间序列基础3. 重采样及频率转换4. 时间序列可视化5. 窗口函数5.1 移动窗口函数5.2 指数加权函数5.3 二元移动窗口函数时间序列&#xff08;Time Series&#xff09;是一种重要的结构化数据形…

【ArcGIS Pro二次开发】(10):属性表字段(field)的修改

在ArcGIS Pro中&#xff0c;经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。 一、要实现的功能 如上图所示的要素图层&#xff0c;要实现如下功能&#xff1a; 当字段【市级行政区】的值为【泉州市】时&#xff0c;将…