os=win11
gcc 版本 11.2.0 (GCC)
我想发送文件二进制文件到网络服务器,但只有英文名称的文件才能上传成功 中文名称的文件会显示如下信息
curl_easy_perform() failed: Failed to open/read local data from file/application
Failed to upload file: C:\test\
int uploadFile(const std::wstring& filepath, const std::wstring& filename) {
std::wifstream file(filepath.c_str(), std::ios::binary);
if (!file) {
std::wcerr << "Failed to open file: " << filepath << std::endl;
return -1;
}
CURL* curl = curl_easy_init();
if (!curl) {
std::cerr << "Failed to initialize curl" << std::endl;
return -1;
}
struct curl_httppost* post = NULL;
struct curl_httppost* last = NULL;
std::string filenameEncoded = curl_easy_escape(curl, std::string(filename.begin(), filename.end()).c_str(), filename.length());
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, std::string(filepath.begin(), filepath.end()).c_str(), CURLFORM_FILENAME, filenameEncoded.c_str(), CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_URL, UPLOAD_URL.c_str());
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
return -1;
}
return 0;
}
我该如何解决,谢谢...
我像这样更改代码
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, filepath.c_str(), CURLFORM_FILENAME, filenameEncoded.c_str(), CURLFORM_END);
所有中文名称或英文名称的文件,显示以下信息
curl_easy_perform() failed: Failed to open/read local data from file/application
Failed to upload file: C:\test\a.pdf
我像这样更改代码
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, filepath, CURLFORM_FILENAME, filenameEncoded.c_str(), CURLFORM_END);
所有中文名称或英文名称的文件,显示以下信息
curl_easy_perform() failed: Failed to open/read local data from file/application
Failed to upload file: C:\test\a.pdf
我像这样更改代码
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string filenameEncoded = curl_easy_escape(curl, converter.to_bytes(filename).c_str(), converter.to_bytes(filename).length());
curl_formadd(&post, &last, CURLFORM_COPYNAME, "file", CURLFORM_FILE, converter.to_bytes(filepath).c_str(), CURLFORM_FILENAME, filenameEncoded.c_str(), CURLFORM_END);
只有中文名称的文件才会显示以下信息
curl_easy_perform() failed: Failed to open/read local data from file/application
Failed to upload file: C:\test\