Este artículo estudia principalmente los contenidos relacionados de los ejemplos de uso del cliente Java FastDFS, y la implementación específica es la siguiente.
¿Qué es FastDFS?
FastDFS es un sistema de archivos distribuido de código abierto escrito en el lenguaje C. FastDFS está hecho a medida para Internet, considerando completamente mecanismos como el respaldo redundante, el equilibrio de carga y la expansión de la capacidad lineal y la atención a los indicadores como la alta disponibilidad y el alto rendimiento. Es fácil crear un clúster de servidor de archivos de alto rendimiento para proporcionar carga de archivos, descarga y otros servicios utilizando FastDFS.
Arquitectura de FastDFS
La arquitectura FastDFS incluye Tracker Server y Storage Server. El cliente solicita al servidor Tracker para cargar y descargar archivos, y el servidor de almacenamiento finalmente cargará y descargará archivos a través de la programación del servidor Tracker. La función del servidor Tracker es el equilibrio y la programación de carga. Al cargar archivos a través del servidor Tracker, puede encontrar el servidor de almacenamiento para proporcionar servicios de carga de archivos de acuerdo con algunas estrategias. Se puede llamar a un rastreador un servidor de seguimiento o un servidor de envío. El propósito del servidor de almacenamiento es el almacenamiento de archivos. Los archivos cargados por el cliente se almacenan finalmente en el servidor de almacenamiento. Storage Server no implementa su propio sistema de archivos, pero utiliza el sistema de archivos del sistema operativo para administrar archivos. El almacenamiento se puede llamar servidor de almacenamiento.
Ejemplo
1. Cree un Maven WebProject llamado
File-Manager: MvNarchetype: create-dgroupid = plataforma.activity.filemanager-dartifactId = file-manager-darchetypeartifactId = maven-archetype-webapp
2. Defina un archivo de cliente FastDFS fdfs_client.conf:
class = "Propiedades" 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 necesita aquí
3. Defina una interfaz de configuración:
paquete com.chuanliu.platform.activity.fm.manager; import java.io.serializable; interfaz pública Filemanagerconfig extiende 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. Encapsular un archivo de archivo fastdfs
paquete com.chuanliu.platform.activity.fm.manager; clase pública FastDFSFile implementa Filemanagerconfig {private estático final Long SerialVersionUid = -996760121932438618l; nombre de cadena privada; Contenido de byte privado []; cadena privada ext; Private String Height = file_default_height; Private String Width = file_default_width; string private string autor = file_default_author; public fastdfsfile (name de cadena, byte [] contenido, cadena ext, altura de cadena, ancho de cadena, autor de cadena) {super (); this.name = name; this.content = content; this.ext = ext; this.Height = altura; this.width = ancho; this.author = autor; } public fastdfsfile (name de cadena, 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 altura; } public void setheight (altura de cadena) {this.height = altura; } public String getWidth () {Width de retorno; } public void setWidth (ancho de cadena) {this.width = width; } public String getAuthor () {return autor; } public void setAuthor (autor de cadena) {this.author = autor; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }}5. Defina la clase Core Filemanager, que contiene métodos para cargar, eliminar y obtener archivos:
paquete com.chuanliu.platform.activity.fm.manager; import java.io.file; import java.io.ioException; importar org.apache.log4j.logger; importar org.csource.common.namevaluePair; import og.csource.astidfs.clobal; import; importar; importar; import org.csource.fastdfs.fileInfo; import org.csource.fastdfs.serverinfo; import org.csource.fastdfs.storageClient; import og.csource.fastdfs.storageserver; import og.csource.fastdfs.trackerclient; importar org.csource.fastdfs; importar org.csource.fastdfs.trackerClient; importar org.csource.fastdffs; importación; com.chuanliu.platform.activity.basic.util.loggerutils; public class Filemanager implementa FilemanaguerConfig {private Static final Long SerialVersionUid = 1L; Logger de registro estático privado = logger.getLogger (filemanger.classass); rastreador privado de rastreador estaticero privado; rastreador estático privado; storageServer; private static storageClient storageClient; static {// Inicializar Fast DFS CLIENTE CONFIGURACIONESTRY {String classpath = new File (filemanager.class.getResource ("/"). getFile ()). getCanonicalPath (); string fdfsclient configfilePath + classpath + file Client_config_file; logger.info ("Ruta del archivo de configuración de DFS Fast:" + FDFSCLIENTCONFIGFILEPATH); ClientGlobal.init (FDFSCLIENTCONFIGFILEPATH); TrackRient = new TrackerClient (); TrackerServer = TrackerClient.getConnection (); stORAGECLIENT = New STORAGECLENTER (TRATATERSIENTER (trackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSerMient (TrackerSer storageServer);} catch (Exception e) {loggerUtils.error (logger, e);}} public static string upload (fastDFSFile file) {loggerUtilss.info (logger, "archivo de archivo:" + file.getName () + "longitud de archivo:" + file.getContent (). NameValuePair [3]; meta_list [0] = new nameValuePair ("ancho", "120"); meta_list [1] = new nameValuePair ("heigth", "120"); meta_list [2] = newValuePair ("autor", "diandi"); stement = system.currentTrententtimeMem () uploadResults = null; try {uploadResults = storageClient.upload_file (file.getContent (), file.getext (), meta_list);} catch (ioException e) {logger.error ("Io Exception cuando cargueindo el archivo:" + file.getName (), e);} Catch (excepción (excepción) IO Excepción cuando cargue el archivo: " + file.getName (), e);} logger.info (" upload_file time usado: " + (system.currentTimillis () - starttime) +" ms "); if (uploadResults == null) {loggerutils.error (logger (loger" storageClient.getErrorCode ());} string groupName = uploadResults [0]; String RemoteFileName = uploadResults [1]; String FileAbsolutePath = Protocol + TrackerServer.getInetSocketDdress (). RemoteFileName; loggerutils.info (logger, "¡Cargue el archivo con éxito!" + "group_name:" + groupname + ", remotoFileName:" + "" + remotoFileName); return FileAbsolutePath;} public static FileInfo getFile (string groupName, stringfileName) {try {return {return {return storageClient.get_file_info (groupname, remoteFileName);} catch (ioException e) {logger.error ("excepción io: obtenga el archivo de rápidos dfs fallado", e);} capt (excepción e) {logger.error ("no io excepción: obtenga el archivo de FAST DFS fallido", e);} regreso null;} public static void void void veltel GroupName, String RemoteFileName) lanza la excepción {storageClient.delete_file (groupname, remoteFileName);} public static storageserver [] getStoreStorages (string groupName) lanza IOException {return rastreClient.getStorSeStorages (rastreador de rastreadoras);} Public static staticfo [] (Servidor de retorno (Servidor (Servidor de stringfoRes GroupName, String RemoteFileName) lanza IOException {return backerClient.getFetchStorages (TrackerServer, GroupName, RemoteFileName);}}6. Clase de prueba de unidades
Manager de paquetes; import java.io.file; import java.io.fileInputStream; import org.csource.fastdfs.fileinfo; import org.csource.fastdfs.serverInfo; import org.csource.fastdfs.storagageerver; import.junit.test; import org.springringframe 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 void upar () 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 (archivo); system.out.println (FileAbsolutePath); fis.close ();}@Test public void getFile () lanza excepción {fileInfo file = filemanager.getFile ("group1", "M00/00/00/WKGBM1N1-CIANRLMAABYGPYZDLW073.JPG"); ASSERT.NOTNULL (FILE); String SourceIpAddr = File.getSourceIpAddr (); Long Size = File.getFilesize (); System.Println ("ip:" + SourceIpaddr + ", size:" + size; getStoraGeserver () lanza la excepción {storageserver [] ss = filemanager.getStorStorages ("group1"); afirmo.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"); afirmo.notnull (servidores); for (int k = 0; k <servers.length; k ++) {system.err.println (k + 1 + "." + Servers [k] .getipaddr () + ":" servidores [k] .getPort ());}}}
Resumir
Lo anterior es todo el contenido de este artículo sobre el uso del código de instancia del cliente Java FastDFS, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!