Setting the path_filter and show_files_listing, but list page still show all files.
- Ngôn ngữ chính
- Rust
- Star
- 24.8k
- Fork
- 1.9k
- Merge trung bình
- 23 giờ 10 phút
- Pull request đã merge (30 ngày)
- 26
Mô tả
```rs
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

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)
```rs
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
Hướng dẫn đóng góp
Hướng nghiên cứu
The reproduction uses Files::new with path_filter and show_files_listing; start by running it, then trace the directory-listing path through DirectoryRenderer and Directory. Done means the listing omits files rejected by path_filter while access behavior remains consistent with that filter.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rust
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 68/100