fastdfs使用实战(Java实例篇)
来源:互联网 发布:矩阵式led大灯有必要吗 编辑:程序博客网 时间:2024/09/21 06:19
fastdfs使用实战(Java实例篇)
标签:fastdfsjava| 发表时间:2014-09-29 10:11 | 作者:love398146779
出处:http://www.iteye.com
一、创建一个maven的webproject,叫file-manager:mvnarchetype:create-DgroupId=platform.activity.filemanager-DartifactId=file-manager-DarchetypeArtifactId=maven-archetype-webapp
二、定义一个fastDFS的客户端文件fdfs_client.conf:
三、定义一个配置接口:
四、封装一个FastDFS文件Bean
五、定义核心的FileManager类,里面包含有上传、删除、获取文件的方法:
六、Unit Test测试类
二、定义一个fastDFS的客户端文件fdfs_client.conf:
二、定义一个fastDFS的客户端文件fdfs_client.conf:class="properties" name="code">connect_timeout = 2network_timeout = 30charset = UTF-8http.tracker_http_port = 8080http.anti_steal_token = nohttp.secret_key = FastDFS1234567890tracker_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. * * <note>In this version, FileManager only support single tracker, will enhance this later...</note> * * @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 configurationstry {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 {@Testpublic 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();}@Testpublic 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);}@Testpublic 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()); }}@Testpublic 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()); }}}
阅读全文
0 0
- fastdfs使用实战(Java实例篇)
- fastdfs 图片服务器 使用java端作为客户端上传图片 / 【FastDFS专题】fastdfs使用实战(概念篇)
- 【FastDFS专题】fastdfs使用实战(使用篇)
- 【FastDFS专题】fastdfs使用实战(概念篇)
- 【FastDFS专题】fastdfs使用实战(安装篇)
- 【FastDFS专题】fastdfs使用实战(配置篇)
- 【FastDFS专题】fastdfs使用实战(概念篇)
- 【FastDFS专题】fastdfs使用实战(概念篇)
- FastDFS实战(四)- Java集成FastDFS
- FastDFS安装使用实战三(使用篇)
- FastDFS安装使用实战三(使用篇)
- FastDFS安装使用实战一(安装篇)
- FastDFS安装使用实战二(配置篇)
- FastDFS安装使用实战一(安装篇)
- FastDFS安装使用实战二(配置篇)
- FastDFS实战(一)- 介绍
- FastDFS实战(二)- 安装
- 使用FastDFS搭建图片服务器单实例篇
- LLDB与debugserver
- android开发之Fragment
- 3 递归和分治的思想
- 深入理解javascript原型和闭包(3)——prototype原型
- 安卓onSaveInstanceState和onRestoreInstanceState触发的时机
- fastdfs使用实战(Java实例篇)
- 使用caffe训练faster-rcnn时遇到的问题总结
- linux 下使用CMake编译程序
- List<Object>使用Object的某个属性进行排序(正序,倒序)
- ArrayList源码解析
- 基于深度学习的目标检测
- 百度地图搜索位置
- Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
- 完整java开发中JDBC连接数据库代码和步骤