使用libcurl库上传sftp服务器,上传.txt文件成功,且sftp收到的.txt文件大小正常。上传.xlsx文件时也提示成功,sftp上也有收到文件,但文件大小变成1k了,不是实际大小,excel不能打开。(上传.rar文件也变成1k大小),不知道这是为什么,代码如下,请帮忙查看一下。
size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream) //回调函数
{
curl_off_t nread;
size_t retcode = fread(ptr, size, nmemb, (FILE*)(stream));
nread = (curl_off_t)retcode;
return retcode;
}
size_t CTest02Dlg::upload(const char * user,const char * passwd,const char * url, const char * path)
{
curl_global_init(CURL_GLOBAL_DEFAULT);
int nRet(-1);
CURL *curl;
CURLcode res;
//struct curl_slist *headerlist = NULL;
std::string s1(user);
std::string s2(passwd);
std::string s3 = s1;
s3.append(":");
s3.append(s2);
system("ls write_file");
FILE* pSendFile = fopen(path,"r");
if(pSendFile == NULL)
{
printf("open failed\n");
return 1;
}
printf("------------\n");
fseek(pSendFile, 0L, SEEK_END);
printf("------------\n");
size_t iFileSize = ftell(pSendFile);
printf("------------\n");
fseek(pSendFile, 0L, SEEK_SET);
printf("begin easy_init\n");
curl = curl_easy_init();
printf("curl_easy_init success\n");
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL,url);
curl_easy_setopt(curl, CURLOPT_USERPWD,s3.c_str());
curl_easy_setopt(curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);//
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
curl_easy_setopt(curl, CURLOPT_READDATA, pSendFile);
curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 0);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, iFileSize);
printf("curl_easy_setopt success");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if(CURLE_OK != res)
{
nRet = 2;
fprintf(stdout, "curl told us %d\n", res);
}
else
{
nRet = 0;
}
}
fclose(pSendFile);
curl_global_cleanup();
return nRet;
}
void CTest02Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
int nRet = upload("sftpuser","123","sftp://192.168.2.15:22/test/(2023-05-1608_48_00).xlsx","D:\test\(2023-05-1608_48_00).xlsx");
}