es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar los archivos con todas las extensiones basándose en una expresión regular de nombre de archivo en GoLang.

El siguiente código puede abrir un archivo con el nombre rx80AWS.png, pero quiero abrir un archivo con rx80AWS* sin importar la extensión, ya que los nombres de archivo serán únicos, pero subiremos archivos .png, .pdf y .jpeg en la carpeta.

func DescargarCertificado(w http.ResponseWriter, r *http.Request) {
    ArchivoAbierto, err := os.Open("./certificado/rx80_AWS.png") //Abre el archivo para descargarlo después
    defer ArchivoAbierto.Close()                                 //Cerrar después de que la función termine
    fmt.Println("Archivo:", files)
    if err != nil {
        http.Error(w, "Archivo no encontrado.", 404) //Devuelve 404 si no se encuentra el archivo
        return
    }

    tempBuffer := make([]byte, 512)                       //Crea un arreglo de bytes para leer el archivo después
    ArchivoAbierto.Read(tempBuffer)                             //Lee el archivo en bytes
    TipoArchivo := http.DetectContentType(tempBuffer) //Obtiene la cabecera del archivo

    InfoArchivo, _ := ArchivoAbierto.Stat()                     //Obtiene información del archivo
    TamañoArchivo := strconv.FormatInt(InfoArchivo.Size(), 10) //Obtiene el tamaño del archivo como un string

    NombreArchivo := attuid + "_" + habilidad

    //Configurar las cabeceras
    w.Header().Set("Content-Type", TipoArchivo+";"+NombreArchivo)
    w.Header().Set("Content-Length", TamañoArchivo)

    ArchivoAbierto.Seek(0, 0)  //Ya hemos leído 512 bytes del archivo, por lo que restablecemos el desplazamiento a 0
    io.Copy(w, ArchivoAbierto) //'Copia' el archivo al cliente
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para abrir el archivo independientemente de la extensión, puedes usar la función filepath.Glob para buscar patrones en el nombre del archivo.

    El código se puede modificar de la siguiente manera:

    func DescargarCertificado(w http.ResponseWriter, r *http.Request) {
        archivos, err := filepath.Glob("./certificate/rx80_AWS*") // buscar patrones en el nombre del archivo
        if err != nil || len(archivos) == 0 {
            http.Error(w, "Archivo no encontrado.", 404) // retornar 404 si el archivo no se encuentra
            return
        }
    
        archivoAbierto, err := os.Open(archivos[0]) // abrir el primer archivo coincidente para ser descargado posteriormente
        defer archivoAbierto.Close() // cerrar después de que la función retorne
    
        // el resto del código permanece sin cambios
    }
    

    Este código buscará todos los archivos en el directorio ./certificate que comiencen con rx80_AWS y tengan cualquier extensión, y luego abrirá el primer archivo coincidente para ser descargado.

Comments are closed.