java極簡使用FastFDFS文件服務器上傳圖片

結果圖:http://office-img01.ly-huangtu.cn:10007/group1/M00/00/01/rBAEF16j3HSAKGL4AAAexZJI7KM70.jpeg

在這裏插入圖片描述

fdfsTest代碼

package com.jilong.eurekaconsumer.fdfs;

import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import java.io.IOException;
import java.util.ResourceBundle;

public class FastDFSTest {

    //初始化配置文件
   static ResourceBundle resourceBundle = null;
    static {
        resourceBundle =  ResourceBundle.getBundle("config");
    }
    @Test
    public void fdfsTest() throws IOException, MyException {
        try {
            // 1、加載配置文件,配置文件中的內容就是tracker服務的地址(絕對路徑)
            ClientGlobal.init( FastDFSTest.class.getResource("/config.properties").getPath());//獲得配置文件的路徑
            // 2、創建一個TrackerClient對象
            TrackerClient trackerClient = new TrackerClient();
            // 3、使用阿哥TrackerClient對象創建連接,獲得一個TrackerServer對象
            TrackerServer trackerServer = trackerClient.getConnection();
            String ip = trackerServer.getInetSocketAddress().toString();//獲得ip+端口
            // 4、創建一個StorageServer的引用,值爲null
            StorageServer storageServer = null;
            // 5、創建一個StorageClient對象,需要兩個參數TrackerServer對象、Storage、Server的引用
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            //當前路徑創建文件夾‘imgs’
            String savePath = resourceBundle.getString("savePath");//獲取圖片保存地址
            //判斷項目根目錄下面是否存在image文件夾,沒有進行創建
            FileUtils.createOrExistsDir(savePath);
            String img = "https://www.baidu.com/img/bd_logo1.png";
            //將圖片轉換成base64
            String base64 =  ImgUtil.imgBase64(img);
            //把base64轉換成圖片在存到指定路徑‘savePath’
            String pathUrl =  ImgUtil.GenerateImage(base64,savePath);
            // 6、使用StorageClient對象上傳圖片,擴展名不用帶“.”
            String [] strs = storageClient.upload_file(pathUrl,"jpeg",null);
            FileUtils.deleteEveryThing(pathUrl);//上傳成功後刪除本地文件
            // 7、返回數組,包含組名和圖片的路徑
            System.out.print("地址爲:");
            String path = "";
            for (String str : strs) {   // 組名+磁盤地址
                path = path + str + "/";
            }
            // 進行地址處理並輸出
            System.out.println("http://"+resourceBundle.getString("tracker_path")+"/"+path.substring(0,path.length()-1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    }

config.properties配置文件

network_timeout = 30
charset = UTF-8
#上傳fdfsd的地址 ip+端口  如: office-xxx.cn:8888
tracker_server = 你的上傳fdfsd的地址
#訪問fdfs地址 ip+端口  如: office-xxx.cn:8888
tracker_path = 你的訪問fdfs地址
#將base64生成圖片到本地,當前路徑創建文件夾‘imgs’
savePath = imgs

ImgUtil工具類方法

package com.jilong.eurekaconsumer.fdfs;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ImgUtil {
   
   
    /**
     * 將網絡圖片轉成Base64碼,此方法可以解決解碼後圖片顯示不完整的問題
     * (加上data:image/jpeg;base64,)
     * @param "imgURL圖片地址。 例如:http://***.com/271025191524034.jpg
     * @return
     */
    public static String imgBase64(String imgURL) {
        ByteArrayOutputStream outPut = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        try {
            // 創建URL
            URL url = new URL(imgURL);
            // 創建鏈接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(10 * 1000);

            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return "fail";// 連接失敗/鏈接失效/圖片不存在
            }
            InputStream inStream = conn.getInputStream();
            int len = -1;
            while ((len = inStream.read(data)) != -1) {
                outPut.write(data, 0, len);
            }
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 對字節數組Base64編碼
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(outPut.toByteArray());
    }

    /**
     * @Description: base64字符串轉化成圖片
     *
     * @param: imgStr
     * @Return:
     */

    public static String GenerateImage(String base64str, String savepath) { // 對字節數組字符串進行Base64解碼並生成圖片
        if (base64str == null) // 圖像數據爲空
            return "";
        // System.out.println("開始解碼");
        base64str=base64str.replace("data:image/jpeg;base64,","");
        //base64str=base64str.replaceAll(" ", "+");
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解碼
            byte[] b = decoder.decodeBuffer(base64str);
            // System.out.println("解碼完成");
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {// 調整異常數據
                    b[i] += 256;
                }
            }
            // System.out.println("開始生成圖片");
            // 生成jpeg圖片
            String imgName =""+ System.currentTimeMillis()/1000;
//            OutputStream out = new FileOutputStream(savepath+"\\"+imgName+".jpg"); //windows 路徑
            String path = savepath+"/"+imgName+".jpg";
            path = path.replaceAll("/","\\\\");// linux 路徑
            OutputStream out = new FileOutputStream(path); // linux 路徑
            out.write(b);
            out.flush();
            out.close();
            return path;
        } catch (Exception e) {
            return "";
        }
    }
}

依賴包jar

       <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>
        <!-- 工具包 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.10</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

超級重點: 感謝觀看 : )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章