我想在使用 actix-web 时限制每个 api 的上传文件大小,因此我像这样调整代码(旧配置仅包含一项服务):
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/tex/project")
.route("/list", web::get().to(get_projects))
.route("/copy", web::post().to(cp_proj)),
);
// https://stackoverflow.com/questions/71714621/actix-web-limit-upload-file-size
cfg.app_data(
MultipartFormConfig::default()
.total_limit(1048576) // 1 MB = 1024 * 1024
.memory_limit(2097152) // 2 MB = 2 * 1024 * 1024
.error_handler(handle_multipart_error),
)
.service(web::scope("/tex/project").route("/upload", web::post().to(upload_full_proj)));
cfg.app_data(
MultipartFormConfig::default()
.total_limit(104857600) // 100 MB = 1024 * 1024
.memory_limit(209715200) // 200 MB = 200 * 1024 * 1024
.error_handler(handle_multipart_error),
)
.service(web::scope("/tex/project").route("/file/upload", web::post().to(upload_proj_file)));
}
在我拆分配置后,似乎只有第一个服务配置有效,当我使用第二个 URL 上传时,显示 404 未找到错误。我遗漏了什么吗?我尝试使用不同的名称调整范围,但仍然没有解决这个问题。
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/tex/project")
.route("/list", web::get().to(get_projects))
.route("/copy", web::post().to(cp_proj)),
);
// https://stackoverflow.com/questions/71714621/actix-web-limit-upload-file-size
cfg.app_data(
MultipartFormConfig::default()
.total_limit(1048576) // 1 MB = 1024 * 1024
.memory_limit(2097152) // 2 MB = 2 * 1024 * 1024
.error_handler(handle_multipart_error),
)
.service(web::scope("/tex/project/proj").route("/upload", web::post().to(upload_full_proj)));
cfg.app_data(
MultipartFormConfig::default()
.total_limit(104857600) // 100 MB = 1024 * 1024
.memory_limit(209715200) // 200 MB = 200 * 1024 * 1024
.error_handler(handle_multipart_error),
)
.service(web::scope("/tex/project/file").route("/upload", web::post().to(upload_proj_file)));
}
您正在添加多个有冲突的范围,并且您没有
.app_data
在正确的位置调用;您仍然将其添加到根目录,而不是特定于每条路线(cfg.app_data
将直接添加到cfg
而不是之后的内容)。你需要做这样的事情: