Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

143
Vistas
Normalize file path in JavaScript front-end

The short story:

Is there simple way to normalize file path in JavaScript, like in Java we have Paths.get("/a/b/../c").normalize() so /a/../../c would become /c. I seen many same questions here, but they are Node.js solutions, and I need pure JS or JQuery approach so it can be used in browser.

The long story:

I have a file server with web UI, that allows to browse files and download them. UI is written in spring and accessible at mysite.com/ui/

The file storage located at mysite.com/files/ which is plain Apache directory, so its possible to get direct link to file.

The real storage directory on server is /var/www/files

Path passing to back-end as mysite.com/ui/?path=/a/../../c, so back-end will normalize path variable separately to /c and then append it to base dir and so retrieving content of /home/storage/c, so it works perfectly.

The problem comes when user tries to download file like this with direct link. I.e. if user tries to download /a/../../c/d file from file server root, it appending to base storage url, which mysite.com/files/, and it becomes mysite.com/files/a/../../c/d so it will point to /var/www/d instead of /var/www/files/d so file can't be downloaded even if it is visible from web UI.

So I need to normalize relative file path first on front-end like on back-end when retrieving content of directory but I don't know how it can be done in JS. Is there function for it, or I have to write my own one?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

So I ended up writing my own function on JS. It might be not what "path normalization" stands for, but anyway its exactly what I need

function normalizePath(path) {
    // remove multiple slashes
    path = path.replace(/\/+/g, '/');
    // remove leading slash, will be added further
    if (path.startsWith("/"))
        path = path.substring(1)
    // remove trailing slash
    if (path.endsWith("/"))
        path = path.slice(0, -1);
    let segments = path.split("/");
    let normalizedPath = "/";
    for (let segmentIndex = 0; segmentIndex < segments.length; segmentIndex++) {
        if (segments[segmentIndex] === "." || segments[segmentIndex] === "") {
            // skip single dots and empty segments
            continue;
        }
        if (segments[segmentIndex] === "..") {
            // go up one level if possible
            normalizedPath = normalizedPath.substring(0, normalizedPath.lastIndexOf("/") + 1);
            continue;
        }
        // append path segment
        if (!normalizedPath.endsWith("/"))
            normalizedPath = normalizedPath + "/"
        normalizedPath = normalizedPath + segments[segmentIndex];
    }
    return normalizedPath;
}

Still, I won't mark this as accepted answer as it's more of a quick fix, and I'm not JS expert so it definitely must be more elegant solution.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda