Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

142
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!