Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

146
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda