使用fastDFS客户端改造文件上传
java客户端
余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知。而且已经很久不维护了。
这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot2.0。
配置使用极为简单,支持连接池,支持自动生成缩略图,狂拽酷炫吊炸天啊,有木有。
地址:tobato/FastDFS_client
接下来,我们就用FastDFS改造learn-upload工程。
引入依赖
在父工程中,我们已经管理了依赖,版本为:
<fastDFS.client.version>1.26.2</fastDFS.client.version>
因此,这里我们直接在taotao-upload工程的pom.xml中引入坐标即可:
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId>
</dependency>
引入配置类
纯java配置:
@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {}
编写FastDFS属性
在application.yml配置文件中追加如下内容:
fdfs:so-timeout: 1501 # 超时时间connect-timeout: 601 # 连接超时时间thumb-image: # 缩略图width: 60height: 60tracker-list: # tracker地址:你的虚拟机服务器地址+端口(默认是22122)- 192.168.56.101:22122
配置hosts
将来通过域名:image.learn.com这个域名访问fastDFS服务器上的图片资源。所以,需要代理到虚拟机地址:
配置hosts文件,使image.learn.com可以访问fastDFS服务器
测试
创建测试类:
把以下内容copy进去:
@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {@Autowiredprivate FastFileStorageClient storageClient;@Autowiredprivate ThumbImageConfig thumbImageConfig;@Testpublic void testUpload() throws FileNotFoundException {// 要上传的文件File file = new File("C:\\Users\\leon\\Pictures\\xbx1.jpg");// 上传并保存图片,参数:1-上传的文件流 2-文件的大小 3-文件的后缀 4-可以不管他StorePath storePath = this.storageClient.uploadFile(new FileInputStream(file), file.length(), "jpg", null);// 带分组的路径System.out.println(storePath.getFullPath());// 不带分组的路径System.out.println(storePath.getPath());}@Testpublic void testUploadAndCreateThumb() throws FileNotFoundException {File file = new File("C:\\Users\\leon\\Pictures\\xbx1.jpg");// 上传并且生成缩略图StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(new FileInputStream(file), file.length(), "png", null);// 带分组的路径System.out.println(storePath.getFullPath());// 不带分组的路径System.out.println(storePath.getPath());// 获取缩略图路径String path = thumbImageConfig.getThumbImagePath(storePath.getPath());System.out.println(path);}
}
结果:
group1/M00/00/00/wKg4ZVsWl5eAdLNZAABAhya2V0c424.jpg
M00/00/00/wKg4ZVsWl5eAdLNZAABAhya2V0c424.jpg
group1/M00/00/00/wKg4ZVsWmD-ARnWiAABAhya2V0c772.png
M00/00/00/wKg4ZVsWmD-ARnWiAABAhya2V0c772.png
M00/00/00/wKg4ZVsWmD-ARnWiAABAhya2V0c772_60x60.png
访问第二组第一个路径:
访问最后一个路径(缩略图路径),注意加组名(group1):
改造上传逻辑
@Service
public class UploadService {@Autowiredprivate FastFileStorageClient storageClient;private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpeg", "image/gif");private static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class);public String upload(MultipartFile file) {String originalFilename = file.getOriginalFilename();// 校验文件的类型String contentType = file.getContentType();if (!CONTENT_TYPES.contains(contentType)){// 文件类型不合法,直接返回nullLOGGER.info("文件类型不合法:{}", originalFilename);return null;}try {// 校验文件的内容BufferedImage bufferedImage = ImageIO.read(file.getInputStream());if (bufferedImage == null){LOGGER.info("文件内容不合法:{}", originalFilename);return null;}// 保存到服务器// file.transferTo(new File("C:\\learn\\images\\" + originalFilename));String ext = StringUtils.substringAfterLast(originalFilename, ".");StorePath storePath = this.storageClient.uploadFile(file.getInputStream(), file.getSize(), ext, null);// 生成url地址,返回return "http://image.learn.com/" + storePath.getFullPath();} catch (IOException e) {LOGGER.info("服务器内部错误:{}", originalFilename);e.printStackTrace();}return null;}
}
只需要把原来保存文件的逻辑去掉,然后上传到FastDFS即可。
测试
通过RestClient测试:
页面测试上传
发现上传成功:
使用fastDFS客户端改造文件上传相关推荐
- FastDFS 设计理念、文件上传、下载、同步、删除和断点续传原理
一.FastDFS 系统架构和功能原理 1.架构详解 storage server:存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上.Storage s ...
- Qt之QFtp 在客户端实现文件上传、下载、新建文件夹、重命名、删除和刷新等功能
简述 本来是打算用新的类QNetworkAccessManager实现的客户端的文件上传.下载.新建文件夹.重命名.删除和刷新等功能,但是QNetworkAccessManager没有提供原本在QFt ...
- fastDFS分布式文件系统--文件上传/下载/查询完整代码实现
搭建环境 这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在: https://github.com/happyfish100/fastdfs-client-j ...
- fastdfs连接mysql_fastDFS文件上传简单案例
基于fastDFS做了一个简单的文件上传案例(贼简陋),文件上传成功后将文件信息保存到MySQL数据库中 pom.xml 1 2 3 org.springframework.boot 4 spring ...
- SpringBoot集成FastDFS依赖实现文件上传
前言 对FastDFS文件系统安装后的使用. FastDFS的安装请参考这篇:https://www.cnblogs.com/niceyoo/p/13511082.html 本文环境:IDEA + J ...
- 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...
- PHP 表单文件上传的原理,php上传文件的原理
文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data&q ...
- php实现附件上传下载,PHP实现文件上传与下载
文件上传原理: 将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可. 客户端配置: 1.表单页面 2.表单的发送方式为post 3.添加enctype="multipar ...
- 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放
导航 [初探HTML5之使用新标签布局]用html5布局我的博客页! [HTML5初探之form标签]解放表单验证.增加文件上传.集成拖放 [HTML5初探之绘制图像(上)]看我canvas元素引领下 ...
最新文章
- 读取jar包资源代码赏析
- vue(2)---computed,watch--2019.5.21学习笔记
- NYOJ 595 乱七八糟
- 使用ffmpeg视频切片并加密
- nvcc fatal : Unsupported gpu architecture 'compute_11'
- smart filter无法从smart business应用获得值的问题分析
- 保留凸性的方式:一个凸函数在一个随机变量上的期望仍然是凸函数
- 精灵图的使用(HTML、CSS)
- Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
- 淘宝电子面单怎么用CAINIAO打印组件调打印偏移
- DDOS高防IP作用,哪些地方需要用到高防IP
- 上位机和下位机笔记总结
- 浙江大学计算机程序设计能力考试(PAT)简介
- 在线报表设计实战系列 – ②制作表格类报表
- CSS3中rotate的作用
- 树莓派应用:无线扫描仪
- bcm4322linux驱动下载,苹果MAC BOOK PRO 5.5 2009年中 安装fedora26——broadcom BCM4322 无线驱动在fedora上的安装...
- Echarts的世界、中国、省份地图
- Expected Error Reduction的缺点
- 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【02】食物健脾