#3207·actix-web

Setting the path_filter and show_files_listing, but list page still show all files.

Author: ahaoboyCreated Dec 2, 2023Updated Sep 15, 2026
LabelsC-improvementgood-first-issueA-files
rust
Files::new("/", EXAMPLES_DIR)
    .path_filter(|n, _| {
        println!("{:?}", n);
        let s = n.to_str().unwrap();
        if s == "lib.rs" || s == "" {
            true
        } else {
            false
        }
    })
    .show_files_listing(),

Expected Behavior

Only display the files that pass the filter, as in the example above, only the lib.rs file should be displayed.

Current Behavior

image Display all files, but only those passed by the filter can be accessed.

Possible Solution

Add a filter parameter to the DirectoryRenderer function, or add a filter field to the Directory.

Steps to Reproduce (for bugs)

rust
use actix_files::Files;
use actix_web::{get, guard, middleware, App, HttpServer, Responder};
const EXAMPLES_DIR: &str = concat![env!("CARGO_MANIFEST_DIR"), "/src"];

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));

    log::info!("starting HTTP server at http://localhost:8080");

    HttpServer::new(|| {
        App::new()
            .service(
                Files::new("/", EXAMPLES_DIR)
                    .path_filter(|n, _| {
                        println!("{:?}", n);
                        let s = n.to_str().unwrap();
                        if s == "lib.rs" || s == "" {
                            true
                        } else {
                            false
                        }
                    })
                    .show_files_listing(),
            )
            .wrap(middleware::Logger::default())
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

Context

When I set a filter, it indicates that I don't want users to be aware of the existence of certain files. However, these files are still displayed on the list page and are inaccessible, which can confuse users.

Your Environment

  • Rust Version (I.e, output of rustc -V): rustc 1.76.0-nightly (1e9dda77b 2023-11-22)
  • Actix Web Version: e95c8fe5a6d466ba674ea2ea35c0c4d18e1bb9d0