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

java fastdfs客戶端使用實(shí)例代碼

 更新時間:2018年01月29日 11:47:37   作者:胡一生  
這篇文章主要介紹了java fastdfs客戶端使用實(shí)例代碼,簡單介紹了FastDFS的概念和架構(gòu),然后分享了實(shí)例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是java fastdfs客戶端使用實(shí)例的相關(guān)內(nèi)容,具體實(shí)現(xiàn)如下。

什么是FastDFS?

FastDFS是用c語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。

FastDFS架構(gòu)

FastDFS架構(gòu)包括 Tracker server和Storage server??蛻舳苏埱骉racker server進(jìn)行文件上傳、下載,通過Tracker server調(diào)度最終由Storage server完成文件上傳和下載。Tracker server作用是負(fù)載均衡和調(diào)度,通過Tracker server在文件上傳時可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù)??梢詫racker稱為追蹤服務(wù)器或調(diào)度服務(wù)器。Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務(wù)器上,Storage server沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件??梢詫torage稱為存儲服務(wù)器。

實(shí)例

一、創(chuàng)建一個maven的webproject,叫

file-manager:mvnarchetype:create-DgroupId=platform.activity.filemanager-DartifactId=file-manager-DarchetypeArtifactId=maven-archetype-webapp

二、定義一個fastDFS的客戶端文件fdfs_client.conf:

class="properties" name="code">connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890

tracker_server = 192.168.1.156:22122
#tracker_server = 192.168.1.188:22122

#storage_server = 192.168.1.155:23000 #no need here

三、定義一個配置接口:

package com.chuanliu.platform.activity.fm.manager;
import java.io.Serializable;
public interface FileManagerConfig extends Serializable {
 public static final String FILE_DEFAULT_WIDTH   = "120";
 public static final String FILE_DEFAULT_HEIGHT   = "120";
 public static final String FILE_DEFAULT_AUTHOR   = "Diandi";
 public static final String PROTOCOL = "http://";
 public static final String SEPARATOR = "/";
 public static final String TRACKER_NGNIX_PORT   = "8080";
 public static final String CLIENT_CONFIG_FILE  = "fdfs_client.conf"; 
}

四、封裝一個FastDFS文件Bean

package com.chuanliu.platform.activity.fm.manager;
public class FastDFSFile implements FileManagerConfig {
 private static final long serialVersionUID = -996760121932438618L;
 private String name;
 private byte[] content;
 private String ext;
 private String height = FILE_DEFAULT_HEIGHT;
 private String width = FILE_DEFAULT_WIDTH;
 private String author = FILE_DEFAULT_AUTHOR;
 public FastDFSFile(String name, byte[] content, String ext, String height,String width, String author) {
  super();
  this.name = name;
  this.content = content;
  this.ext = ext;
  this.height = height;
  this.width = width;
  this.author = author;
 }
 public FastDFSFile(String name, byte[] content, String ext) {
  super();
  this.name = name;
  this.content = content;
  this.ext = ext;
 }
 public byte[] getContent() {
  return content;
 }
 public void setContent(byte[] content) {
  this.content = content;
 }
 public String getExt() {
  return ext;
 }
 public void setExt(String ext) {
  this.ext = ext;
 }
 public String getHeight() {
  return height;
 }
 public void setHeight(String height) {
  this.height = height;
 }
 public String getWidth() {
  return width;
 }
 public void setWidth(String width) {
  this.width = width;
 }
 public String getAuthor() {
  return author;
 }
 public void setAuthor(String author) {
  this.author = author;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 } 
}

五、定義核心的FileManager類,里面包含有上傳、刪除、獲取文件的方法:

package com.chuanliu.platform.activity.fm.manager;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.ServerInfo;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import com.chuanliu.platform.activity.basic.util.LoggerUtils;
public class FileManager implements FileManagerConfig {
	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(FileManager.class);
	private static TrackerClient trackerClient;
	private static TrackerServer trackerServer;
	private static StorageServer storageServer;
	private static StorageClient storageClient;
	static {
		// Initialize Fast DFS Client configurations
		try {
			String classPath = new File(FileManager.class.getResource("/").getFile()).getCanonicalPath();
			String fdfsClientConfigFilePath = classPath + File.separator + CLIENT_CONFIG_FILE;
			logger.info("Fast DFS configuration file path:" + fdfsClientConfigFilePath);
			ClientGlobal.init(fdfsClientConfigFilePath);
			trackerClient = new TrackerClient();
			trackerServer = trackerClient.getConnection();
			storageClient = new StorageClient(trackerServer, storageServer);
		}
		catch (Exception e) {
			LoggerUtils.error(logger, e);
		}
	}
	public static String upload(FastDFSFile file) {
		LoggerUtils.info(logger, "File Name: " + file.getName() + "File Length: " + file.getContent().length);
		NameValuePair[] meta_list = new NameValuePair[3];
		meta_list[0] = new NameValuePair("width", "120");
		meta_list[1] = new NameValuePair("heigth", "120");
		meta_list[2] = new NameValuePair("author", "Diandi");
		long startTime = System.currentTimeMillis();
		String[] uploadResults = null;
		try {
			uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
		}
		catch (IOException e) {
			logger.error("IO Exception when uploadind the file: " + file.getName(), e);
		}
		catch (Exception e) {
			logger.error("Non IO Exception when uploadind the file: " + file.getName(), e);
		}
		logger.info("upload_file time used: " + (System.currentTimeMillis() - startTime) + " ms");
		if (uploadResults == null) {
			LoggerUtils.error(logger, "upload file fail, error code: " + storageClient.getErrorCode());
		}
		String groupName     = uploadResults[0];
		String remoteFileName  = uploadResults[1];
		String fileAbsolutePath = PROTOCOL + trackerServer.getInetSocketAddress().getHostName() 
		    + SEPARATOR
		    + TRACKER_NGNIX_PORT
		    + SEPARATOR 
		    + groupName 
		    + SEPARATOR 
		    + remoteFileName;
		LoggerUtils.info(logger, "upload file successfully!!! " +"group_name: " + groupName + ", remoteFileName:"
		    + " " + remoteFileName);
		return fileAbsolutePath;
	}
	public static FileInfo getFile(String groupName, String remoteFileName) {
		try {
			return storageClient.get_file_info(groupName, remoteFileName);
		}
		catch (IOException e) {
			logger.error("IO Exception: Get File from Fast DFS failed", e);
		}
		catch (Exception e) {
			logger.error("Non IO Exception: Get File from Fast DFS failed", e);
		}
		return null;
	}
	public static void deleteFile(String groupName, String remoteFileName) throws Exception {
		storageClient.delete_file(groupName, remoteFileName);
	}
	public static StorageServer[] getStoreStorages(String groupName) throws IOException {
		return trackerClient.getStoreStorages(trackerServer, groupName);
	}
	public static ServerInfo[] getFetchStorages(String groupName, String remoteFileName) throws IOException {
		return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
	}
}

六、Unit Test測試類

package manager;
import java.io.File;
import java.io.FileInputStream;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.ServerInfo;
import org.csource.fastdfs.StorageServer;
import org.junit.Test;
import org.springframework.util.Assert;
import com.chuanliu.platform.activity.fm.manager.FastDFSFile;
import com.chuanliu.platform.activity.fm.manager.FileManager;
/**
 * @author Josh Wang(Sheng)
 *
 * @email josh_wang23@hotmail.com
 */
public class TestFileManager {
	@Test
	 public void upload() throws Exception {
		File content = new File("C:\\520.jpg");
		FileInputStream fis = new FileInputStream(content);
		byte[] file_buff = null;
		if (fis != null) {
			int len = fis.available();
			file_buff = new byte[len];
			fis.read(file_buff);
		}
		FastDFSFile file = new FastDFSFile("520", file_buff, "jpg");
		String fileAbsolutePath = FileManager.upload(file);
		System.out.println(fileAbsolutePath);
		fis.close();
	}
	@Test
	 public void getFile() throws Exception {
		FileInfo file = FileManager.getFile("group1", "M00/00/00/wKgBm1N1-CiANRLmAABygPyzdlw073.jpg");
		Assert.notNull(file);
		String sourceIpAddr = file.getSourceIpAddr();
		long size = file.getFileSize();
		System.out.println("ip:" + sourceIpAddr + ",size:" + size);
	}
	@Test
	 public void getStorageServer() throws Exception {
		StorageServer[] ss = FileManager.getStoreStorages("group1");
		Assert.notNull(ss);
		for (int k = 0; k < ss.length; k++){
			System.err.println(k + 1 + ". " + ss[k].getInetSocketAddress().getAddress().getHostAddress() + ":" + ss[k].getInetSocketAddress().getPort());
		}
	}
	@Test
	 public void getFetchStorages() throws Exception {
		ServerInfo[] servers = FileManager.getFetchStorages("group1", "M00/00/00/wKgBm1N1-CiANRLmAABygPyzdlw073.jpg");
		Assert.notNull(servers);
		for (int k = 0; k < servers.length; k++) {
			System.err.println(k + 1 + ". " + servers[k].getIpAddr() + ":" + servers[k].getPort());
		}
	}
}

總結(jié)

以上就是本文關(guān)于java fastdfs客戶端使用實(shí)例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • SpringBoot之RestTemplate在URL中轉(zhuǎn)義字符的問題

    SpringBoot之RestTemplate在URL中轉(zhuǎn)義字符的問題

    這篇文章主要介紹了SpringBoot之RestTemplate在URL中轉(zhuǎn)義字符的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java枚舉類使用場景及實(shí)例解析

    Java枚舉類使用場景及實(shí)例解析

    這篇文章主要介紹了Java枚舉類使用場景及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Maven 常用插件的詳細(xì)整理

    Maven 常用插件的詳細(xì)整理

    這篇文章主要介紹了Maven 常用插件的詳細(xì)整理的相關(guān)資料,這里整理了maven的常用插件需要的朋友可以看下,需要的朋友可以參考下
    2017-08-08
  • 教你輕松制作java視頻播放器

    教你輕松制作java視頻播放器

    這篇文章主要為大家詳細(xì)介紹了如何編寫屬于自己的java視頻播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 區(qū)分Java的方法覆蓋與變量覆蓋

    區(qū)分Java的方法覆蓋與變量覆蓋

    作為初學(xué)者2個比較容易出錯的定義,方法覆蓋和變量覆蓋。下面我們一起來看看作者如何去探討Java的方法覆蓋和變量覆蓋。
    2015-09-09
  • 基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能

    基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能

    應(yīng)公司要求,在HTML5頁面上實(shí)現(xiàn)上傳文件到服務(wù)器功能,對于我這樣的菜鳥,真是把我難住了,最后還是請教大神搞定的,下面小編把例子分享到腳本之家平臺,供大家參考
    2017-08-08
  • SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包

    SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包

    這篇文章主要介紹了SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Java httpcomponents發(fā)送get post請求代碼實(shí)例

    Java httpcomponents發(fā)送get post請求代碼實(shí)例

    這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • freemarker?jsp?java內(nèi)存方式實(shí)現(xiàn)分頁示例

    freemarker?jsp?java內(nèi)存方式實(shí)現(xiàn)分頁示例

    這篇文章主要介紹了freemarker?jsp?java內(nèi)存方式實(shí)現(xiàn)分頁示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 解決maven沒有打包xml文件的問題

    解決maven沒有打包xml文件的問題

    這篇文章主要介紹了解決maven沒有打包xml文件的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

三明市| 邻水| 山东省| 襄樊市| 横山县| 太仆寺旗| 鸡东县| 东莞市| 海伦市| 图片| 延长县| 天峨县| 靖安县| 浮山县| 芮城县| 东乡族自治县| 紫阳县| 容城县| 炉霍县| 库伦旗| 梁河县| 正安县| 正定县| 临邑县| 凌源市| 苍南县| 和平县| 昔阳县| 莒南县| 新龙县| 泾阳县| 琼中| 台前县| 雅江县| 马山县| 湘潭县| 乡城县| 大邑县| 礼泉县| 龙州县| 泰宁县|