添加项目文件。
parent
13c0535528
commit
486ed28c56
@ -0,0 +1,55 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include "../cpp-httplib/httplib.h"
|
||||
#include <direct.h>
|
||||
using namespace std;
|
||||
using namespace httplib;
|
||||
|
||||
string GetExeDir()
|
||||
{
|
||||
char buff[_MAX_PATH];
|
||||
_getcwd(buff, _MAX_PATH);
|
||||
string currPath(buff);
|
||||
return string(buff);
|
||||
}
|
||||
|
||||
const string CLIENT_FILE_DIR = "/ClientFiles/";
|
||||
|
||||
void download_file(const string& file_name) {
|
||||
httplib::Client cli("http://localhost:1234");
|
||||
|
||||
auto res = cli.Get(("/download/" + file_name).c_str());
|
||||
|
||||
if (res && res->status == 200) {
|
||||
string save_path = GetExeDir()+CLIENT_FILE_DIR + file_name;
|
||||
|
||||
// ´ò¿ªÎļþ½øÐÐдÈë
|
||||
ofstream file(save_path, ios::binary);
|
||||
if (!file) {
|
||||
cerr << "Failed to save file: " << save_path << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
file.write(res->body.c_str(), res->body.size());
|
||||
file.close();
|
||||
|
||||
cout << "File downloaded and saved at: " << save_path << endl;
|
||||
}
|
||||
else {
|
||||
cerr << "Failed to download file. Status code: "
|
||||
<< (res ? to_string(res->status) : "No response") << endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
string file_name;
|
||||
|
||||
while (file_name!="q")
|
||||
{
|
||||
cout << "Enter the file name to download (q to Exit): ";
|
||||
cin >> file_name;
|
||||
download_file(file_name);
|
||||
}
|
||||
system("pause");
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="源文件">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="头文件">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="资源文件">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="client.cpp">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\cpp-httplib\httplib.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,75 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include "../cpp-httplib/httplib.h"
|
||||
#include <filesystem>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <direct.h>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
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<char> 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);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="源文件">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="头文件">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="资源文件">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="server.cpp">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\cpp-httplib\httplib.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue