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客户端改造文件上传相关推荐

  1. FastDFS 设计理念、文件上传、下载、同步、删除和断点续传原理

    一.FastDFS 系统架构和功能原理 1.架构详解 storage server:存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上.Storage s ...

  2. Qt之QFtp 在客户端实现文件上传、下载、新建文件夹、重命名、删除和刷新等功能

    简述 本来是打算用新的类QNetworkAccessManager实现的客户端的文件上传.下载.新建文件夹.重命名.删除和刷新等功能,但是QNetworkAccessManager没有提供原本在QFt ...

  3. fastDFS分布式文件系统--文件上传/下载/查询完整代码实现

    搭建环境 这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在: https://github.com/happyfish100/fastdfs-client-j ...

  4. fastdfs连接mysql_fastDFS文件上传简单案例

    基于fastDFS做了一个简单的文件上传案例(贼简陋),文件上传成功后将文件信息保存到MySQL数据库中 pom.xml 1 2 3 org.springframework.boot 4 spring ...

  5. SpringBoot集成FastDFS依赖实现文件上传

    前言 对FastDFS文件系统安装后的使用. FastDFS的安装请参考这篇:https://www.cnblogs.com/niceyoo/p/13511082.html 本文环境:IDEA + J ...

  6. 大文件上传服务器:支持超大文件HTTP断点续传的实现办法

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...

  7. PHP 表单文件上传的原理,php上传文件的原理

    文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data&q ...

  8. php实现附件上传下载,PHP实现文件上传与下载

    文件上传原理: 将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可. 客户端配置: 1.表单页面 2.表单的发送方式为post 3.添加enctype="multipar ...

  9. 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放

    导航 [初探HTML5之使用新标签布局]用html5布局我的博客页! [HTML5初探之form标签]解放表单验证.增加文件上传.集成拖放 [HTML5初探之绘制图像(上)]看我canvas元素引领下 ...

最新文章

  1. 读取jar包资源代码赏析
  2. vue(2)---computed,watch--2019.5.21学习笔记
  3. NYOJ 595 乱七八糟
  4. 使用ffmpeg视频切片并加密
  5. nvcc fatal : Unsupported gpu architecture 'compute_11'
  6. smart filter无法从smart business应用获得值的问题分析
  7. 保留凸性的方式:一个凸函数在一个随机变量上的期望仍然是凸函数
  8. 精灵图的使用(HTML、CSS)
  9. Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
  10. 淘宝电子面单怎么用CAINIAO打印组件调打印偏移
  11. DDOS高防IP作用,哪些地方需要用到高防IP
  12. 上位机和下位机笔记总结
  13. 浙江大学计算机程序设计能力考试(PAT)简介
  14. 在线报表设计实战系列 – ②制作表格类报表
  15. CSS3中rotate的作用
  16. 树莓派应用:无线扫描仪
  17. bcm4322linux驱动下载,苹果MAC BOOK PRO 5.5 2009年中 安装fedora26——broadcom BCM4322 无线驱动在fedora上的安装...
  18. Echarts的世界、中国、省份地图
  19. Expected Error Reduction的缺点
  20. 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【02】食物健脾

热门文章

  1. T extends ComparableT和T extends Comparable? super T含义
  2. os.path python使用遍历文件夹文件
  3. 8758:2的幂次方表示
  4. STL之deque详解
  5. html的!DOCTYPE标签初窥
  6. 【转载】SDRAM时钟相移估算
  7. 【Apache POI】Java写入Excel文件
  8. Linux SSH和SFTP服务分离
  9. Everything you need to learn about engineering freelance
  10. Raspberry PI 系列 —— 裸机点亮LED灯