Spring boot集成Go-FastDFS实现图片上传删除等功能实现

一.背景

工作中接触到需要采集并管理大量图片的需求,本来是用的FastDFS,但是发现实际情况是在项目实施时难以找到linux服务器去安装FastDFS,所以经过调研,选择了可以在windows服务器上安装部署的Go-FastDFS文件服务器

二.Go-FastDFS简介

go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。

三.安装Go-FastDFS文件服务器

1)下载地址:https://github.com/sjqzhang/go-fastdfs/releases

2)下载完成直接启动fileserver.exe

3)验证是否安装成功,访问localhost:8080

4)验证上传功能,点击选择文件选择好文件后,点击上传

5)在返回的url后加?download=0,查看图片

四.实例实现功能

1)图片上传
2)图片删除
3)图片访问
4)图片水印添加

五.创建Spring boot项目,写代码实现功能

1)pom.xml添加依赖

 <!--工具包-->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>${hutool.version}</version>
    </dependency>

2)核心代码,使用go-fastdhs上传图片并添加水印及删除图片工具类

@Component
public class GoFastdfsClientUtil {

  @Value("${camera.upload.path}")
  private String uploadPath;

  @Value("${camera.delete.path}")
  private String deletePath;

  private final Logger logger = LoggerFactory.getLogger(GoFastdfsClientUtil.class);

  /**
   * 图片上传
   *
   * @param file
   * @param sixCode
   * @return
   * @throws IOException
   */
  public UploadResult upload(MultipartFile file, String sixCode) throws IOException {
    UploadResult uploadResult = new UploadResult();
    ByteArrayOutputStream bos = addWatermark(file, sixCode);
    byte[] b = bos.toByteArray();
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(b);
    InputStreamResource isr = new InputStreamResource(byteArrayInputStream, file.getOriginalFilename());
    Map<String, Object> params = new HashMap<>();
    params.put("file", isr);
    params.put("path", "image");
    params.put("output", "json");
    // 场景
    params.put("scene", "image");
    String resp = HttpUtil.post(uploadPath, params);
    Console.log("resp: {}", resp);
    JSONObject exJson = JSONObject.parseObject(resp);
    uploadResult = JSON.toJavaObject(exJson, UploadResult.class);
    return uploadResult;
  }

  /**
   * 图片删除
   *
   * @param fileUrl
   */
  public void deleteImage(String md5) {
    if (StringUtils.isEmpty(md5)) {
      return;
    }
    try {
      Map<String, Object> params = new HashMap<>();
      params.put("md5", md5);
      HttpUtil.post(deletePath, params);
    } catch (Exception e) {
      logger.warn(e.getMessage());
    }
  }

  /**
   * 加水印
   *
   * @param myfile
   * @param sixCode
   * @return
   * @throws IOException
   */
  private ByteArrayOutputStream addWatermark(MultipartFile myfile, String sixCode) throws IOException {
    InputStream in = myfile.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(in);
    BufferedImage image = ImageIO.read(bis);
    int height = image.getHeight();
    int width = image.getWidth();
    // 加水印
    Graphics2D g = image.createGraphics();
    g.drawImage(image, 0, 0, width, height, null);
    g.setColor(new Color(128, 128, 128));
    // 字体
    int num = 0;
    if (width > height) {
      num = height / 30;
    } else {
      num = width / 30;
    }
    g.setFont(new Font("微软雅黑", Font.PLAIN, num));
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date = formatter.format(new Date());
    String watermarkContent = "拍摄时间:" + date + "&摄像头编码:" + sixCode;
    // 设置水印坐标
    String[] split = watermarkContent.split("&");
    int x = 10;
    int y = height - 10;
    for (int i = 0; i < split.length; i++) {
      g.drawString(split[i], x, y -= g.getFontMetrics().getHeight());
    }
    g.dispose();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ImageIO.write(image, "jpg", bos);
    return bos;
  }
}

解释:这里我们事先在配置文件中配置好了文件的上传路径以及删除路径,配置如下:

camera:
 upload:
  path: http://localhost:8080/group1/upload
 delete:
  path: http://localhost:8080/group1/delete
 visit:
  path: http://localhost:8080

3)上面的方法中我们将图片上传后的返回值转换为结果集对象,对象定义如下:

public class UploadResult implements Serializable{

/**
 *
 */
private static final long serialVersionUID = 5534287808864118463L;
private String url;
private String md5;
private String path;
private String domain;
private String scene;
private BigInteger size;
private BigInteger mtime;
private String scenes;
private String retmsg;
private int retcode;
private String src;
......get,set方法.....
}

4)在实际应用中编写控制层方法调用核心工具类的上传,删除方法即可

总结:本次总结主要描述了spring boot集成go-fastdfs上传图片的核心方法,没有具体的测试展示,其实go-fastdfs的使用很简单,接口编写也很简单

到此这篇关于Spring boot集成Go-FastDFS实现图片上传删除等功能实现的文章就介绍到这了,更多相关Spring boot集成Go-FastDFS图片上传删除内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot集成FastDFS+Nginx整合基于Token的防盗链的方法

    为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简化Maven配置 自动配置Spring 提供生产就绪

  • springboot2.0如何通过fastdfs实现文件分布式上传

    这篇文章主要介绍了springboot2.0如何通过fastdfs实现文件分布式上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 引入依赖 在父工程中,我们已经管理了依赖,版本为: <fastDFS.client.version>1.26.7</fastDFS.client.version> 因此,这里我们直接在工程的pom.xml中引入坐标即可: <dependency> <groupId>com

  • 使用Spring Boot集成FastDFS的示例代码

    这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>

  • springboot集成fastDfs过程代码实例

    这篇文章主要介绍了springboot集成fastDfs过程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 pom.xml 引入依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.1-RELEASE</vers

  • Spring boot集成Go-FastDFS实现图片上传删除等功能实现

    一.背景 工作中接触到需要采集并管理大量图片的需求,本来是用的FastDFS,但是发现实际情况是在项目实施时难以找到linux服务器去安装FastDFS,所以经过调研,选择了可以在windows服务器上安装部署的Go-FastDFS文件服务器 二.Go-FastDFS简介 go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能.高可靠.无中心.免维护等优点. 三.安装Go-FastDFS文件服务器 1)下载

  • Spring Boot 会员管理系统之处理文件上传功能

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难. 1. 前端部分 在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下: <form th:action="@{/admin/addMember}

  • Spring boot 实现单个或批量文件上传功能

    一:添加依赖: <!-- thymeleaf模板插件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- jsp依赖 --> <dependency> <groupId>j

  • Spring Boot整合EasyExcel(完整版包含上传解析excel和下载模板)

    1. 加入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version> </dependency> 2. 对读取excel内容(批量添加) @PostMapping("plUpdate") public R plUpdate(@Request

  • SpringBoot 文件或图片上传与下载功能的实现

    导入依赖(pom.xml) <!-- 上传下载需要设计到的jar包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-fileu

  • Vue.js 2.0 移动端拍照压缩图片上传预览功能

    在学习和使用Vue.js 2.0 的过程中遇到不少不一样的地方,本来移动端开发H5应用,准备将mui框架和Vue.js+vue-router+vuex 全家桶结合起来使用,但是在拍照上传的实现过程中遇到了无法调用plus的H5+接口的问题,所以最后拍照上传功能还是使用input file方式里解决的.但是内心还是不甘心的,由于项目进度推进,迭代版本,所以不得不放弃,后续可能我将此功能使用调用H5+接口实现. 首先我来讲我实现这个拍照预览压缩上传的思路,准确的说应该是拍照或选择图片压缩之后预览及上

  • php实现图片上传、剪切功能

    本文实例为大家详细介绍了php实现图片上传.剪切功能的具体代码,供大家参考,具体内容如下 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Index extends MY_Controller { function __construct(){ parent::__construct(); $this->load->helper(array('form', 'url')); } /**

  • JS实现图片上传预览功能

    废话不多说了,直接给大家贴js代码了,具体代码如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title></title> </head> <body&g

  • WebApi2 文件图片上传与下载功能

    Asp.Net Framework webapi2 文件上传与下载 前端界面采用Ajax的方式执行 一.项目结构 1.App_Start配置了跨域访问,以免请求时候因跨域问题不能提交.具体的跨域配置方式如下,了解的朋友请自行略过. 跨域配置:NewGet安装dll Microsofg.AspNet.Cors 然后在App_Start 文件夹下的WebApiConfig.cs中写入跨域配置代码. public static class WebApiConfig { public static vo

  • tp5实现微信小程序多图片上传到服务器功能

    最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助. 1,小程序端: 在wxml文件中: <!--选择图片 --> <view class="picture"> <view class="img" wx:for="{{imgs}}" wx:for-item="item" wx:key="*this"> <im

随机推荐