This article mainly studies related contents of Java fastdfs client usage examples, and the specific implementation is as follows.
What is FastDFS?
FastDFS is an open source distributed file system written in C language. FastDFS is tailor-made for the Internet, fully considering mechanisms such as redundant backup, load balancing, and linear capacity expansion, and paying attention to indicators such as high availability and high performance. It is easy to build a high-performance file server cluster to provide file upload, download and other services using FastDFS.
FastDFS architecture
The FastDFS architecture includes Tracker server and Storage server. The client requests the Tracker server to upload and download files, and the Storage server will finally upload and download files through the Tracker server scheduling. The function of Tracker server is load balancing and scheduling. When uploading files through Tracker server, you can find the Storage server to provide file upload services according to some strategies. A tracker can be called a tracking server or a dispatching server. The purpose of Storage server is file storage. The files uploaded by the client are ultimately stored on the Storage server. Storage server does not implement its own file system but uses the operating system's file system to manage files. Storage can be called a storage server.
Example
1. Create a maven webproject called
file-manager:mvnarchetype:create-DgroupId=platform.activity.filemanager-DartifactId=file-manager-DarchetypeArtifactId=maven-archetype-webapp
2. Define a fastDFS client file 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
3. Define a configuration interface:
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"; }4. Encapsulate a FastDFS file 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; } }5. Define the core FileManager class, which contains methods for uploading, deleting, and obtaining files:
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 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);}}6. Unit Test Test Class
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 [email protected] */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());}}}
Summarize
The above is all the content of this article about the use of the instance code of the Java fastdfs client, and I hope it will be helpful to everyone. Interested friends can continue to refer to other related topics on this site. If there are any shortcomings, please leave a message to point it out. Thank you friends for your support for this site!