使用libcurl上传文件
uploading file with libcurl
看一下下面的代码
static size_t reader(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t retcode = fread(ptr, size, nmemb, stream);
cout << "*** We read " << retcode << " bytes from file" << endl;
return retcode;
}
void upload() { //upload() is called from ouside
FILE *pFile;
pFile = fopen("map.txt" , "r");
struct stat file_info;
stat("map.txt", &file_info);
size_t size = (size_t)file_info.st_size;
uploadFile(pFile, size);
}
bool uploadFile(void* data, size_t datasize) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
char *post_params = ...;
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_params);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(post_params));
curl_easy_setopt(curl, CURLOPT_READFUNCTION, reader);
curl_easy_setopt(curl, CURLOPT_READDATA, data);
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) datasize);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return true;
}
执行代码时,输出如下内容
*** We read 490 bytes from file
*** We read 0 bytes from file
之后,应用程序什么都不做(甚至不退出)。
谁能指出这里有什么问题吗?将感激任何帮助!!
这段代码中显示了一些严重的混淆。让我来解释一下:
CURLOPT_UPLOAD -当选择的协议是HTTP
时,这将要求libcurl PUT文件CURLOPT_POSTFIELDS -告诉libcurl POST附加参数(其大小设置为CURLOPT_POSTFIELDSIZE)中提供的数据
CURLOPT_READFUNCTION -提供libcurl获取数据的另一种方式,而不是CURLOPT_POSTFIELDS,以允许POST从文件中读取数据。当使用CURLOPT_UPLOAD时,这是提供数据的唯一方法。
最后留给你们的问题是:
您想要PUT还是POST?
你想提供数据作为一个字符串还是你想提供一个回调?
相关文章:
- 使用 Libcurl 库进行文件下载
- 视觉 无法使用 libcurl c++ 下载文件
- cpp libcurl 在 HTTP post 调用中发送 zip 文件,而不使用 multipart\form-da
- 如何使用libcurl c ++从url保存XML文件
- 使用 libcurl C++将文件下载到 Ubuntu,简单示例不起作用
- 如何在 c++ 中下载参数不使用 libcurl 的文件
- 当我设置readdata并读取功能以上载文件时,libcurl会在fwrite()上崩溃
- libcurl文件帖子在C 中,可用示例
- C++libcurl来检查远程文件是否不同
- 使用Libcurl从FTP服务器下载多个文件
- 发送cURL PUT命令,使用libcurl在c++中用程序在webhdfs中创建文件
- C++:如何在使用libcurl的windows中运行可执行文件
- 使用 libcurl 上传文件
- C++ 客户端使用 libcurl 将文件上传到 EFT 服务器
- 读取通过 libcurl 下载的文件
- C++libcurl——从ftp下载一个txt文件并保存为字符串
- 使用C++中的libcurl在Linux上保存一个具有绝对路径的文件
- 通过libcurl在dropbox上创建文件夹时出错
- 使用libcurl上传文件
- libcURL缓冲文件上传不工作