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>
超級重點: 感謝觀看 : )