fastdfs使用实战(java实例篇)_fastdfs使用实战(Java实例篇)

fastdfs 安装详解   org.csourcefastdfs-client-java

一、创建一个maven的webproject,叫file-manager:mvnarchetype:create-DgroupId=platform.activity.filemanager-DartifactId=file-manager-DarchetypeArtifactId=maven-archetype-webapp

二、定义一个fastDFS的客户端文件fdfs_client.conf: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;

/**

* @author Josh Wang(Sheng)

*

* @email josh_wang23@hotmail.com

*/

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;

/**

* @author Josh Wang(Sheng)

*

* @email josh_wang23@hotmail.com

*/

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;

/**

* File Manager used to provide the services to upload / download / delete the files

* from FastDFS.

*

* In this version, FileManager only support single tracker, will enhance this later...

*

* @author Josh Wang(Sheng)

*

* @email josh_wang23@hotmail.com

*/

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());

}

}

}

文章来自: 程序员俱乐部(www.cxyclub.cn) 详文参考:http://www.cxyclub.cn/n/44103/

先引用一下FastDFS的介绍: FastDFS is an open source high performance distributed file system. It's major functions include: file storing, file syncing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值