@@ -3756,6 +3756,48 @@ R"x*x*x(<html>
3756
3756
boost::system::error_code ec;
3757
3757
auto & request = hctx.request_ ;
3758
3758
3759
+ // 查找目录下是否存在 index.html 或 index.htm 文件, 如果存在则返回该文件.
3760
+ // 否则返回目录下的文件列表.
3761
+ auto index_html = fs::path (hctx.target_path_ ) / " index.html" ;
3762
+ fs::exists (index_html, ec) ? index_html = index_html :
3763
+ index_html = fs::path (hctx.target_path_ ) / " index.htm" ;
3764
+
3765
+ if (fs::exists (index_html, ec))
3766
+ {
3767
+ std::ifstream file (index_html.string (), std::ios::binary);
3768
+ if (file)
3769
+ {
3770
+ std::string content (
3771
+ (std::istreambuf_iterator<char >(file)),
3772
+ std::istreambuf_iterator<char >());
3773
+
3774
+ string_response res{ http::status::ok, request.version () };
3775
+ res.set (http::field::server, version_string);
3776
+ res.set (http::field::date, server_date_string ());
3777
+ auto ext = to_lower (index_html.extension ().string ());
3778
+ if (global_mimes.count (ext))
3779
+ res.set (http::field::content_type, global_mimes[ext]);
3780
+ else
3781
+ res.set (http::field::content_type, " text/plain" );
3782
+ res.keep_alive (request.keep_alive ());
3783
+ res.body () = content;
3784
+ res.prepare_payload ();
3785
+
3786
+ http::serializer<false , string_body, http::fields> sr (res);
3787
+ co_await http::async_write (
3788
+ m_local_socket,
3789
+ sr,
3790
+ net_awaitable[ec]);
3791
+ if (ec)
3792
+ XLOG_WARN << " connection id: "
3793
+ << m_connection_id
3794
+ << " , http dir write index err: "
3795
+ << ec.message ();
3796
+
3797
+ co_return ;
3798
+ }
3799
+ }
3800
+
3759
3801
auto path_list = format_path_list (hctx.target_path_ , ec);
3760
3802
if (ec)
3761
3803
{
0 commit comments