请问C++ 使用boost实现http服务端时,在接收form-data中的文件并保存在本地时,图片文件和mp4文件都不能打开,其他的文件都可以正常打开
auto& body = this->request_.body();
auto body_str = boost::beast::buffers_to_string(body.data());
std::cerr << "开始 " << '\n';
// 解析请求并查找文件内容
std::string request_str = body_str;
std::size_t start = request_str.find("Content-Disposition: form-data; name=\"file\"; filename=");
std::cerr << "解析文件 开始 " << '\n';
if (start != std::string::npos) {
start += strlen("Content-Disposition: form-data; name=\"file\"; filename=");
std::size_t end = request_str.find("\r\n", start);
std::string filename = request_str.substr(start, end - start);
start = request_str.find("\r\n\r\n", end + 2);
if (start != std::string::npos) {
end = request_str.find("\r\n--", start);
if (end != std::string::npos) {
//去除读取到文件的前两行
std::string file_data = request_str.substr(start, end - start );
// 现在你有了文件数据,可以写入磁盘或其他操作
std::cout << "---------------------" << std::endl;
//std::cout << file_data << std::endl;
//std::cout << "---------------------" << std::endl;
//std::cout << body_str << std::endl;
std::cout << "---------------------" << std::endl;
std::string path;
std::string path1 = "E:\\APK\\" + filename.substr(1, filename.find_last_of("\"")-1);
path = "mkdir \"" + path1 + "\"";
//system(path.c_str());
std::ofstream file(path1, std::ios::binary);
//if (file.is_open()) {
file << file_data;
file.close();
//}
//else {
std::cerr << "Failed to open file: " << filename << '\n';
std::cerr << "path1: " << path1 << '\n';
//}
}
}
}