#include #include #include "../cpp-httplib/httplib.h" #include #include #include #include #include using namespace std; using namespace httplib; const string SERVER_FILE_DIR = "/ServerFiles/"; string GetExeDir() { char buff[_MAX_PATH]; _getcwd(buff, _MAX_PATH); string currPath(buff); return string(buff); } bool file_exists(const string& path) { ifstream file(path, ios::binary); return file.good(); } void send_file(const string& file_path, Response& res) { ifstream file(file_path, ios::binary | ios::ate); if (!file) { res.status = 500; // 服务器错误 res.set_content("Failed to open file", "text/plain"); return; } // 获取文件大小 streamsize file_size = file.tellg(); file.seekg(0, ios::beg); res.set_content_provider( file_size, "application/octet-stream", [file_path](size_t offset, size_t length, DataSink& sink) { ifstream file(file_path, ios::binary); if (!file) return false; file.seekg(offset, ios::beg); vector buffer(length); file.read(buffer.data(), length); sink.write(buffer.data(), file.gcount()); // 发送数据 return true; // 继续传输 } ); } int main() { Server svr; svr.Get(R"(/download/(.+))", [&](const Request& req, Response& res) { string filename = req.matches[1]; string file_path = GetExeDir()+SERVER_FILE_DIR + filename; if (!file_exists(file_path)) { res.status = 404; res.set_content("File not found", "text/plain"); return; } send_file(file_path, res); }); cout << "Server started at http://localhost:1234\n"; svr.listen("localhost", 1234); }