1.1.java客户端

余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知。而且已经很久不维护了。

这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot2.0。

配置使用极为简单,支持连接池,支持自动生成缩略图,狂拽酷炫吊炸天啊,有木有。

地址:tobato/FastDFS_client

接下来,我们就用FastDFS改造~~~-upload工程。

1.1.1.引入依赖

在父工程中,我们已经管理了依赖,版本为:

<fastDFS.client.version>1.26.2</fastDFS.client.version>

因此,这里我们直接在taotao-upload工程的pom.xml中引入坐标即可:

<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
</dependency>

1.1.2.引入配置类

纯java配置:

@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter { }

1.1.3.编写FastDFS属性

在application.yml配置文件中追加如下内容:

fdfs:
so-timeout: 1501 # 超时时间
connect-timeout: 601 # 连接超时时间
thumb-image: # 缩略图
width: 60
height: 60
tracker-list: # tracker地址:你的虚拟机服务器地址+端口(默认是22122)
- 192.168.0.211:22122

1.1.4.配置hosts

将来通过域名:image.~~~.com这个域名访问fastDFS服务器上的图片资源。所以,需要代理到虚拟机地址:

配置hosts文件,使image.~~~.com可以访问fastDFS服务器

1.1.5.测试

创建测试类:

把以下内容copy进去:

 @SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {

@Autowired
private FastFileStorageClient storageClient;

@Autowired
private ThumbImageConfig thumbImageConfig;

@Test
public void testUpload() throws FileNotFoundException {
// 要上传的文件
File file = new File("C:\\Users\\joedy\\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());
}

@Test
public void testUploadAndCreateThumb() throws FileNotFoundException {
File file = new File("C:\\Users\\joedy\\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中改造上传逻辑

红色标记为新加入的

@Service
public class UploadService { @Autowired
private 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)){
// 文件类型不合法,直接返回null
LOGGER.info("文件类型不合法:{}", originalFilename);
return null;
} try {
// 校验文件的内容
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
if (bufferedImage == null){
LOGGER.info("文件内容不合法:{}", originalFilename);
return null;
} // 保存到服务器
// file.transferTo(new File("C:\\~~~\\images\\" + originalFilename));
String ext = StringUtils.substringAfterLast(originalFilename, ".");
StorePath storePath = this.storageClient.uploadFile(file.getInputStream(), file.getSize(), ext, null); // 生成url地址,返回
return "http://image.~~~.com/" + storePath.getFullPath();
} catch (IOException e) {
LOGGER.info("服务器内部错误:{}", originalFilename);
e.printStackTrace();
}
return null;
}
}

最新文章

  1. 如何为编程爱好者设计一款好玩的智能硬件(八)——LCD1602点阵字符型液晶显示模块驱动封装(中)
  2. T4模板
  3. com.google.guava 包解析 ——Google Guava官方教程(中文版)
  4. 微软Hololens设备 浅分析
  5. 在TextView使用部分颜色文字
  6. css3怎么隐藏dom:4种方法
  7. 学习笔记之--Navicat Premium创建数据表
  8. web api 上传
  9. SharePoint 计时器服务无法启动
  10. Javascript:再论Javascript的单线程机制 之 DOM渲染时机
  11. XtraBackup增量备份
  12. STM8的中断系统以及外部中断详解
  13. ES6 浅谈let与const 块级作用域之封闭空间(闭包)
  14. cv2.error: openCV报错
  15. Android开发者的Anko使用指南(一)之Intent
  16. java 常用
  17. MySQL中表复制:create table like 与 create table as select
  18. Jmeter进行接口测试
  19. Oracle JDeveloper 10g 卡顿、花屏的解决方法
  20. docvalue and fielddata

热门文章

  1. 精简TTF字体、FontPruner、汉字字体瘦身(非字蛛)
  2. ES6引入的Reflect对象目的何在?
  3. Android开发进阶 -- 通用适配器 CommonAdapter
  4. libra共识算法分析
  5. 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO
  6. 《ASP.NET Core 3框架揭秘》博文汇总
  7. 【MySQL】Docker搭建MySQL8.0
  8. ExifPro Mod 3.0 64位绿色中文版
  9. 文件合并cat and paste
  10. Tomcat 启动过滤器异常