fastDFS客户端实现文件上传

一、准备工作

  请确保fastDFS的tracker服务和storage服务都是处于启动状态,防火墙是关闭的;

二、具体步骤

1、pom.xml

2、让当前的微服务成为fdfs的客户端

 

package com.qf.config;import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;/*** ClassName: FastClientImporter** @author Guan* Description :  管理fdfs的客户端* date: 2024/2/3 18:55*/
@Configuration
@Import(FdfsClientConfig.class)//引入客户端的配置类
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)//避免重复注册bean
public class FastClientImporter {
}

 3、设置文件上传

package com.qf.controller;import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.qf.utils.Result;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;/*** ClassName: FileUploadController** @author Guan* Description : 用于文件上传(主要是图片)* date: 2024/2/3 18:58*/
@RestController
@RequestMapping("file")
public class FileUploadController {@Autowiredprivate FastFileStorageClient storageClient;//定义上传的文件的后缀private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpg","image/jpeg","image/png","image/gif");@PostMapping("upload")public Result fileUpload(MultipartFile file){try {String originalFilename = file.getOriginalFilename();// 校验文件的类型String contentType = file.getContentType();if (!CONTENT_TYPES.contains(contentType)){// 文件类型不合法,直接返回return Result.error("文件类型不合法:"+originalFilename);}// 校验文件的内容BufferedImage bufferedImage = ImageIO.read(file.getInputStream());if (bufferedImage == null) {return Result.error("文件内容不合法:" + originalFilename);}// 保存到服务器String ext = StringUtils.substringAfterLast(originalFilename, ".");StorePath storePath = this.storageClient.uploadFile(file.getInputStream(),file.getSize(), ext, null);// 生成url地址,返回return Result.ok("http://image.shop.com/" + storePath.getFullPath());} catch (IOException e) {e.printStackTrace();}return Result.error("服务器内部错误");}
}

注意:域名image.shop.com是我自己搭的域名,依靠nginx,用来代理fdfs服务的; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫工作量由小到大的思维转变---<第四十三章 Scrapy Redis mysql数据连通问题(2)>

前言: 接上一章的爬虫工作量由小到大的思维转变---&#xff1c;第四十一章 Scrapy Redis 转mysql数据连通问题&#xff1e;-CSDN博客 这一章主要是讲关于多机连上sql要注意的问题! 正文: 会遇到哪些问题: 数据重复写入&#xff1a;当多个Scrapy-Redis实例同时运行并将数据写…

直播相关——腾讯直播SDK(一)

梳理了下项目中使用的腾讯直播SDK相关&#xff0c;为再接入一套声网RTC SDK做些准备工作。 1.sdk集成 dependencies {implementation com.tencent.liteav:LiteAVSDK_Professional:latest.release }初始化与摄像头推流相关 初始化与摄像头推流相关 2.给 SDK 配置 License 授…

寒假刷代码随想录

数组 二分 在循环中 始终坚持根据查找区间的定义来做边界处理。 第一种写法&#xff0c;我们定义 target 是在一个在左闭右闭的区间里&#xff0c;也就是[left, right] &#xff08;这个很重要非常重要&#xff09;。 区间的定义这就决定了二分法的代码应该如何写&#xff0…

JMeter HTTP请求的详细指南,还不知道的快来看

HTTP请求简介 在JMeter中&#xff0c;服务器名称和它的路径对于检查请求是否到达了正确的目的地非常重要。默认情况下&#xff0c;HTTP协议与请求一起被遵循&#xff0c;如果需要&#xff0c;可以转换为HTTPS。如果需要&#xff0c;用户参数可以包含在特定页面的请求中。如果&a…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存&#xff0c;如果缓存命中的话就直接返回结果&#xff0c;不需要解析sql语句&#xff0c;也不会生成执行计划&#xff0c;更不会执行&#xff1b;如果没有命中缓存&#xff0c;则再进行SQL解析以及进行查询&#xff0c;并将结果返…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归&#xff1a; 举例&#xff1a;蝉&#xff08;昆虫物种&…

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

java下载网络文件

/*** 下载文件** param urlStr* param response* throws Exception*/ GetMapping("/downLoadFile") public void downLoadFile(String urlStr, HttpServletResponse response) throws Exception{// 定义一个URL对象&#xff0c;就是你想下载的图片的URL地址URL url …

【C++】类和对象2:this指针

前言 今天来学习this指针 引入 我们用一个日期Date类来举个例子 class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout <<_year<< "-" <<_month << "-"<…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动&#xff1a;算法和计算力是主要驱动力2、计算力的三驾马车&#xff1a;芯片、超级计算机、云计算3、数据驱动&#xff1a;描绘个性化画像&#xff1b; 后记 每日一句正能量 一般青年的…

自然语言处理(02/10):自然语言处理任务和应用程序

一、描述 在广阔的人工智能领域&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 是一个迷人而充满活力的领域。NLP 弥合了计算机和人类语言之间的鸿沟&#xff0c;使机器能够理解、解释和生成类似人类的文本。这项变革性技术具有深远的影响&#xff0c;影响着我们日常生…

telnet笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、场景二、介绍1.测试端口2.访问百度3. 简单的爬虫 前言 最近telnet命令用的比较多&#xff0c;所以记录一下。 一、场景 ping应该是大家最常用的命令&…

深入理解Istio服务网格数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

macOS的设置与常用软件(含IntelliJ IDEA 2023.3.2 Ultimate安装,SIP的关闭与开启)

目录 1 系统设置1.1 触控板1.2 键盘 2 软件篇2.1 [科学上网](https://justmysocks5.net/members/)2.1 [安装Chrome浏览器](https://www.google.cn/chrome/index.html)2.2 [安装utools](https://www.u.tools)2.3 [安装搜狗输入法](https://shurufa.sogou.com/)2.4 [安装snipaste…

一、Redis之NoSQL

1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产…

微服务架构中的关键组件:Dubbo、Nacos、Feign 和 Eureka

在构建微服务架构时&#xff0c;服务发现、配置管理和服务调用是不可或缺的组成部分。本文将详细介绍三个在这些领域中广泛使用的开源项目&#xff1a;Dubbo、Nacos 和 Eureka&#xff0c;它们各自的特点、区别以及适用的场景。 Dubbo Dubbo 是一个由阿里巴巴开源的高性能、轻…

【Git】03 图形化工具

文章目录 一、右击菜单二、打开仓库三、可视化所有分支历史四、总结 一、右击菜单 二、打开仓库 三、可视化所有分支历史 四、总结 图形化工具了解一下&#xff0c;要懂得在哪里能找到。

Vue工程引入Element-ui

npm 安装ELement-ui npm i element-ui -S 于package.json中发现有“element-ui”版本号即可 引入 Element 在 main.js 中写入以下内容&#xff1a; import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI);之后根据自己的需求设计…

数据库指定某个列的某个值优先排序

有时候接到这么一个需求&#xff0c;就是指定某个商品某个品牌优先展示&#xff0c;那么数据库SQL该怎么实现呢&#xff1f; 比如商品表&#xff08;goods&#xff09;&#xff0c;有个品牌字段&#xff08;brand&#xff09;&#xff0c;公司要求优先展示【华为】品牌的商品&…

代码随想录二刷——栈与队列day11

文章目录 前言栈与队列知识点 一、 20. 有效的括号二、1047. 删除字符串中的所有相邻重复项三、150. 逆波兰表达式求值总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0…