SpringBoot integra la carga de archivos de imágenes fastDfs

1. fastDFS es un sistema de archivos distribuido, que se utiliza principalmente para almacenar y administrar archivos binarios grandes, como imágenes, audio y video.

       1. Tracker Server (Tracker Server): es el programa de servidor de FastDFS, que se utiliza para coordinar la operación de almacenamiento y acceso a archivos, y es responsable de administrar la información de la dirección del Storage Server (Storage Server) y juzgar la disponibilidad. del servidor de almacenamiento.

       2. Servidor de almacenamiento (servidor de almacenamiento): el servidor utilizado para almacenar y administrar archivos es en realidad un nodo de almacenamiento.

       3. Grupo (Grupo): se refiere a la agrupación de servidores de almacenamiento. Después de cargar los archivos, se asignarán a un servidor de este grupo para su almacenamiento.

       4. Cliente FastDFS (Cliente FastDFS): un componente de la aplicación que se utiliza para cargar, descargar y eliminar archivos, generalmente implementado a través de la API del cliente FastDFS.

       5. Ruta de almacenamiento (Ruta de almacenamiento): un identificador único global compuesto por un grupo y un nombre de archivo, que se utiliza para acceder a los archivos almacenados en FastDFS.

       6. Ruta del rastreador (ruta del rastreador): un identificador único global compuesto por la IP y el número de puerto del grupo y el servidor de almacenamiento, que se utiliza para acceder al servidor del rastreador.

       7. Metadatos: se refiere a los metadatos utilizados para describir los atributos del archivo, generalmente utilizados para complementar la descripción, clasificación, estadísticas, distinción y recuperación del archivo, etc. FastDFS admite el almacenamiento de metadatos personalizados y admite consultas y modificaciones.

2. El principio y el proceso de implementación de fastDfs.

       1. Cuando un usuario carga una imagen, el cliente se conectará al trackeServer, y el trackeServer llamará a un StorageServer disponible y devolverá la IP y el puerto del StorageServer.

       2. El cliente accederá al StorageServer de acuerdo con la ip y el prote, pasará los recursos al StorageServer y luego generará una respuesta archivada al archivo y a la ruta del archivo.

       3. TrackeServer y StorageServer deben mantener un mecanismo de latido para que trackeServer sepa qué StorageServer está disponible.

3. SpringBoot integra la tecnología de carga de imágenes fastDfs

1. Introduzca las dependencias del cliente FastDFS: introduzca las dependencias relacionadas de los clientes FastDFS en pom.xml

<!--fastdfs-->
<dependencia>
<groupId>cn.bestwu</groupId>
<artifactId>fastdfs-client-java</artifactId>
<versión>1.27</versión>
</dependencia>

 2. Utilice la clase de herramienta fastDfs.

paquete com.lzc.basic.utils;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
/**
* clase de herramienta fastDfs
*/
public class FastDfsUtils { // desde classpath: el contenido en recursos finalmente Se compilará en una cadena estática pública CONF_FILENAME = FastDfsUtils.class.getClassLoader() .getResource("fdfs_client.conf").getFile(); /** * cargar archivo * @param file * @param extName * @return */ public static Carga de cadena(byte[] archivo,String extName) { prueba { ClientGlobal.init(CONF_FILENAME); TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getConnection();



















Servidor de almacenamientoServidor de almacenamiento = nulo;

StorageClient StorageClient = nuevo StorageClient (trackerServer, StorageServer);
NameValuePair nvp [] = nuevo NameValuePair[]{ nuevo NameValuePair("edad", "18"), nuevo NameValuePair("sexo", "masculino") }; String fileIds[] = StorageClient.upload_file(archivo,extName,nvp); System.out.println(fileIds.length); System.out.println("组名:" + fileIds[0]); System.out.println("路径: " + fileIds[1]); return "/"+fileIds[0]+"/"+fileIds[1]; } captura (Excepción e) { e.




















carga de cadena estática pública (ruta de cadena, nombre de texto de cadena) { intente { ClientGlobal.init (CONF_FILENAME); Rastreador TrackerClient = nuevo TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); Servidor de almacenamientoServidor de almacenamiento = nulo; StorageClient StorageClient = nuevo StorageClient (trackerServer, StorageServer); String fileIds[] = StorageClient.upload_file(ruta, extName,null); System.out.println(fileIds.length); System.out.println("组名:" + fileIds[0]); System.out.println("路径: " + fileIds[1]); return "/"+fileIds[0]+"/"+fileIds[1]; } captura (Excepción e) { e.printStackTrace(); devolver nulo; } } /**





















* 下载文件
* @param groupName
* @param fileName
* @return
*/
byte estático público[] descargar(String groupName,String fileName) { try { ClientGlobal.init(CONF_FILENAME); Rastreador TrackerClient = nuevo TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); Servidor de almacenamientoServidor de almacenamiento = nulo; StorageClient StorageClient = nuevo StorageClient (trackerServer, StorageServer); byte[] b = StorageClient.download_file(nombredelgrupo,nombredelarchivo); volver b; } captura (Excepción e) { e.printStackTrace(); devolver nulo; } }













/**
* 删除文件
* @param groupName
* @param fileName
*/
public static void delete(String groupName,String fileName){ try { ClientGlobal.init(CONF_FILENAME); Rastreador TrackerClient = nuevo TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); Servidor de almacenamientoServidor de almacenamiento = nulo; StorageClient StorageClient = nuevo StorageClient (trackerServer, StorageServer); int i = StorageClient.delete_file (nombre del grupo, nombre del archivo); System.out.println( i==0 ? "删除成功" : "删除失败:"+i); } captura (Excepción e) { e.printStackTrace(); lanzar nueva RuntimeException("删除异常,"+e.getMessage()); } }













// public static void main(String[] args) { // FastDfsUtils.delete("group1","M00/00/0F/oYYBAGJ6IGaAWQeOAAbMJw3URKE510.gif"); // } }


 3. Interfaz de fondo

paquete com.lzc.basic.controller;

importar com.lzc.basic.exception.GlobalExceptionEnum;
importar com.lzc.basic.utils.AjaxResult;
importar com.lzc.basic.utils.FastDfsUtils;
importar org.apache.commons.io .FilenameUtils;
importar org.springframework.web.bind.annotation.*;
importar org.springframework.web.multipart.MultipartFile;

importar java.io.IOException;

/**
* cargar
* descargar = no requerido
* ver = ruta
* eliminar
* Actualizar = eliminar + cargar
*/
@RestController
@RequestMapping("/fastDfs")
public class FastDfsController { //@RequestPart maneja elementos de formulario complejos, el nombre predeterminado = "archivo", que es consistente con el valor del atributo de nombre del archivo cargado archivo @PostMapping


carga pública de AjaxResult(@RequestPart(required = true,value = "file") archivo MultipartFile){ try { System.out.println(file.getOriginalFilename() + ":" + file.getSize()); // 1. Obtenga la matriz de bytes del archivo de file.getBytes() en el objeto complejo getOriginalFilename() Obtenga el nombre original String originalFilename = file.getOriginalFilename(); // 2.FilenameUtils.getExtension(originalFilename); Obtenga el nombre de la extensión del archivo String extName = FilenameUtils. getExtension(originalFilename); // xxx.jpg // String extName = originalFilename.substring(originalFilename.lastIndexOf(".")+1); String filePath = FastDfsUtils.upload(file.getBytes(), extName) ; return AjaxResult. Success(filePath);//Devuelve la ruta cargada } catch (IOException e) { e.printStackTrace();













return AjaxResult.error(GlobalExceptionEnum.UPLOAD_ERROR.getCode(),GlobalExceptionEnum.UPLOAD_ERROR.getMessage());
}
}
/**
* Parámetro: ruta completa /goup1/xxxxx/yyyy
* Valor de retorno: exitoso o no, y dirección de retorno
* //El front-end analógico envía una solicitud para llamar a esta interfaz 1: Eliminar http://localhost:8080/fastDfs//group1/M00/04/72/CgAIC2QetIuAVFPIAAgFDuhQH8Q183.gif - no //El front-end analógico envía una solicitud para llamar a esta interfaz 2:
Eliminar http ://localhost:8080/fastDfs?path=/group1/M00/04/72/CgAIC2QetIuAVFPIAAgFDuhQH8Q183.gif - usando
*/
@DeleteMapping()
public AjaxResult del(@RequestParam(required = true , valor = "ruta") Cadena ruta ){ Cadena rutaTmp = ruta.substring(1); // grupo1/xxxxx/yyyy Cadena nombregrupo = rutaTmp.substring(0, rutaTmp.indexOf("/")); //grupo1


String remotoPath = pathTmp.substring(pathTmp.indexOf("/")+1);// /xxxxx/yyyy
FastDfsUtils.delete(groupName, remotoPath);
devolver AjaxResult.success(ruta);
}
}

4. Vista frontal y elementui

1. Introducir el componente elementui

<el-form-item label="recursos" prop="recursos">
<!--<el-input v-model="editForm.resources" auto-complete="off"></el-input>-- >
<el-upload
class="upload-demo"
action="http://localhost:8080/fastDfs"
:on-remove="handleRemove"
:on-success="handleSuccess"
:file-list="fileList"
lista -type="imagen">
<el-button size="small" type="primary">Haga clic para cargar</el-button>
<div slot="tip" class="el-upload__tip">Subir solo jpg/ archivo png y no más de 500 kb</div>
</el-upload>
</el-form-item>

2. Cómo cargar y eliminar imágenes

handleSuccess(response, file, fileList) { // 1. Siempre que el atributo de acción esté escrito correctamente, se puede cargar // Procesando recursos if(this.editForm.resources){// Hay un valor this.editForm. recursos = this.editForm .resources+","+response.data; }else{ this.editForm.resources = respuesta.data; } //Procesar fileList:resources = xx,xx,xx this.fileList=[];// Primero vacíe, luego agregue las imágenes más recientes de todas las mascotas if(this.editForm.resources){ let arr = this.editForm.resources.split(",");//[xx,xx,xx] for(var i = 0;i<arr .length;i++){ this.fileList.push({"url":"Dirección registrada remota"+arr[i]}); } } } ,















handleRemove(file, fileList) { // 1. Llame a la interfaz de eliminación para eliminar los datos en fastdfs: var url = file.url;// var path = url.substring(url.indexOf("/group"));/ / / group1/M00/00/0C/CgAIC2KrU4qAAy6HAAF5fdD2FCI828.jpg this.$http.delete("/fastDfs?path="+path).then(res=>{ if(res.data.success){ this.$message .success ("¡¡¡Eliminar correctamente!!!"); }else{ this.$message.success("¡¡Eliminar falló!!!"); } }) //2. Procesar recursos if(this.editForm.resources){ / / xx ,yy,zz let arr = this.editForm.resources.split(","); //[xx,yy,zz] for(var i = 0;i<arr.length;i++){ if(ruta == arr[i]){//encontré la imagen eliminada arr.splice(i,1); break; } } //[xx,zz]



















this.editForm.resources = arr.join(","); //xx,zz
console.log(this.editForm.resources)
}
//3. Procesando fileList
this.fileList=[];//Vacío primero - luego Agregue el último
if(this.editForm.resources){ let arr = this.editForm.resources.split(","); //[xx,xx,xx] for(var i = 0;i<arr.length; i++ ){ this.fileList.push({"url":"Dirección registrada remota"+arr[i]}); } } },





Supongo que te gusta

Origin blog.csdn.net/lzc19991201/article/details/131196393
Recomendado
Clasificación