用c++写一个读取文件上传到服务器
以下是一个使用C++编写的读取文件并上传到服务器的示例代码:
#include <iostream>
#include <fstream>
#include <curl/curl.h>
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response) {
size_t totalSize = size * nmemb;
response->append((char*)contents, totalSize);
return totalSize;
}
int main() {
std::string filePath = "path/to/file.txt";
std::string url = "http://example.com/upload";
std::string response;
std::ifstream file(filePath, std::ios::binary);
if (!file) {
std::cout << "Failed to open file." << std::endl;
return 1;
}
// 获取文件大小
file.seekg(0, std::ios::end);
std::streamsize fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// 创建缓冲区
char* buffer = new char[fileSize];
// 读取文件内容到缓冲区
file.read(buffer, fileSize);
file.close();
// 初始化 libcurl
curl_global_init(CURL_GLOBAL_ALL);
CURL* curl = curl_easy_init();
if (curl) {
// 设置上传的 URL
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// 设置上传的数据
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, fileSize);
// 设置回调函数,用于接收服务器的响应
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
// 执行上传
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cout << "Failed to upload: " << curl_easy_strerror(res) << std::endl;
} else {
std::cout << "Upload successful!" << std::endl;
std::cout << "Server response: " << response << std::endl;
}
// 清理资源
curl_easy_cleanup(curl);
}
// 清理缓冲区
delete[] buffer;
// 清理 libcurl
curl_global_cleanup();
return 0;
}
在上述代码中,需要使用到 libcurl 库来进行文件上传。请确保已经安装了 libcurl 库,并在编译时链接该库。
在代码中,需要设置 filePath 变量为要读取的文件路径,url 变量为服务器的上传接口 URL。
代码中的 WriteCallback 函数用于接收服务器的响应,该函数将响应内容存储到 response 变量中。
注意,这只是一个简单的示例代码,如果需要处理更复杂的上传功能,可能需要更多的代码和处理逻辑
原文地址: http://www.cveoy.top/t/topic/iXoZ 著作权归作者所有。请勿转载和采集!