最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)

 更新時間:2020年04月27日 10:33:27   作者:墨營  
這篇文章主要介紹了Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一.背景

工作中接觸到需要采集并管理大量圖片的需求,本來是用的FastDFS,但是發(fā)現(xiàn)實際情況是在項目實施時難以找到linux服務(wù)器去安裝FastDFS,所以經(jīng)過調(diào)研,選擇了可以在windows服務(wù)器上安裝部署的Go-FastDFS文件服務(wù)器

二.Go-FastDFS簡介

go-fastdfs是一個基于http協(xié)議的分布式文件系統(tǒng),它基于大道至簡的設(shè)計理念,一切從簡設(shè)計,使得它的運維及擴展變得更加簡單,它具有高性能、高可靠、無中心、免維護等優(yōu)點。

三.安裝Go-FastDFS文件服務(wù)器

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

2)下載完成直接啟動fileserver.exe


3)驗證是否安裝成功,訪問localhost:8080


4)驗證上傳功能,點擊選擇文件選擇好文件后,點擊上傳

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

四.實例實現(xiàn)功能

1)圖片上傳
2)圖片刪除
3)圖片訪問
4)圖片水印添加

五.創(chuàng)建Spring boot項目,寫代碼實現(xiàn)功能

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;
    // 設(shè)置水印坐標(biāo)
    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)上面的方法中我們將圖片上傳后的返回值轉(zhuǎn)換為結(jié)果集對象,對象定義如下:

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)在實際應(yīng)用中編寫控制層方法調(diào)用核心工具類的上傳,刪除方法即可

總結(jié):本次總結(jié)主要描述了spring boot集成go-fastdfs上傳圖片的核心方法,沒有具體的測試展示,其實go-fastdfs的使用很簡單,接口編寫也很簡單

到此這篇關(guān)于Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)的文章就介紹到這了,更多相關(guān)Spring boot集成Go-FastDFS圖片上傳刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    這篇文章主要為大家詳細介紹了自己編寫的Java數(shù)組操作工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn)

    springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn)

    這篇文章主要介紹了springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Java8如何使用Lambda表達式進行比較

    詳解Java8如何使用Lambda表達式進行比較

    Lambda表達式,也可稱為閉包,是java8的新特性,作用是取代大部分內(nèi)部類,優(yōu)化java代碼結(jié)構(gòu),讓代碼變得更加簡潔緊湊。本文將利用Lambda表達式進行排序比較,需要的可以參考一下
    2022-01-01
  • Java 多線程synchronized關(guān)鍵字詳解(六)

    Java 多線程synchronized關(guān)鍵字詳解(六)

    這篇文章主要介紹了Java 多線程synchronized關(guān)鍵字詳解(六)的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 基于Java實現(xiàn)簡單的時序數(shù)據(jù)壓縮算法

    基于Java實現(xiàn)簡單的時序數(shù)據(jù)壓縮算法

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)簡單易懂的時序數(shù)據(jù)壓縮算法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-06-06
  • jdbc結(jié)合dpcp連接池的封裝實例

    jdbc結(jié)合dpcp連接池的封裝實例

    下面小編就為大家?guī)硪黄猨dbc結(jié)合dpcp連接池的封裝實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java反射耗時測試案例解析

    java反射耗時測試案例解析

    這篇文章主要介紹了java反射耗時測試案例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 如何安裝java的運行環(huán)境IDEA

    如何安裝java的運行環(huán)境IDEA

    這篇文章主要介紹了如何安裝java的運行環(huán)境IDEA,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • springboot整合kaptcha驗證碼的示例代碼

    springboot整合kaptcha驗證碼的示例代碼

    kaptcha是一個很有用的驗證碼生成工具,本篇文章主要介紹了springboot整合kaptcha驗證碼的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • java字符串的重要使用方法以及實例

    java字符串的重要使用方法以及實例

    在本篇文章里小編給大家整理了關(guān)于java字符串的重要使用方法以及實例代碼,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2019-03-03

最新評論

茶陵县| 台东市| 民权县| 南投县| 大关县| 廊坊市| 吴旗县| 墨竹工卡县| 礼泉县| 天台县| 山东省| 朝阳市| 尖扎县| 津市市| 航空| 昌江| 汪清县| 庆阳市| 大渡口区| 晋宁县| 武威市| 常宁市| 金昌市| 师宗县| 甘谷县| 清镇市| 略阳县| 若尔盖县| 吕梁市| 繁昌县| 湖南省| 铜山县| 平南县| 贡嘎县| 江孜县| 怀远县| 共和县| 简阳市| 双辽市| 九寨沟县| 武冈市|