ubuntu+codeblocks+libcurl FTP上传文件
2015-04-21 12:05
197 查看
以前没接触过curl,但是现在要在linux下上传到FTP文件,查了查都说curl比较好,那就研究研究
主要参考的这几篇文章:
http://blog.csdn.net/jgood/article/details/4787670 http://blog.csdn.net/sever2012/article/details/7076248
确实提供了很大的帮助,也有一点点自己摸索的地方,在此记录一下:
ubuntu版本13.10,codeblocks版本12.11,libcurl版本7.32.0
首先需要在ubuntu上安装libcurl,sudo apt-get install libcurl4-gnutls-dev
其实叫libcurl4的包有三个,libcurl4-nss-dev libcurl4-gnutls-dev libcurl4-openssl-dev
我才不会说我安装的这个是我随便挑的一个呢。。
安装完之后在codeblocks里新建一个工程,为什么用codeblocks,省事呗。。
打开菜单栏里的Project->Build options
点你的工程名,不要在debug或release上,省的要改两遍
Compiler Flags->Other options加上`curl-config --cflags`
Linker settings->Other linker options加上`curl-config
--libs`
Search
directories->Compiler加上个/usr/include(这个因人而异)
Search
directories->Linker加上个/usr/lib(这个因人而异)
大功告成,确定
下面直接贴代码好了
在这里说一说我遇到的小问题吧
代码里最后一个curl_easy_setopt函数里,之前的大神博客里给的参数是CURLOPT_INFILELSIZE_LARGE,可能是我上传的文件比较小的原因吧,老是报CURLE_PARTIAL_FILE,说我Transferred a partial file,冥思苦想不得其解。。把代码里的打印debug信息的那一行注释回来发现文件块的大小不符,自作主张把LARGE干掉,一切正常。。
其他也没什么好说了,就是libcurl的相关文章不太好找,希望大家多多分享吧
主要参考的这几篇文章:
http://blog.csdn.net/jgood/article/details/4787670 http://blog.csdn.net/sever2012/article/details/7076248
确实提供了很大的帮助,也有一点点自己摸索的地方,在此记录一下:
ubuntu版本13.10,codeblocks版本12.11,libcurl版本7.32.0
首先需要在ubuntu上安装libcurl,sudo apt-get install libcurl4-gnutls-dev
其实叫libcurl4的包有三个,libcurl4-nss-dev libcurl4-gnutls-dev libcurl4-openssl-dev
我才不会说我安装的这个是我随便挑的一个呢。。
安装完之后在codeblocks里新建一个工程,为什么用codeblocks,省事呗。。
打开菜单栏里的Project->Build options
点你的工程名,不要在debug或release上,省的要改两遍
Compiler Flags->Other options加上`curl-config --cflags`
Linker settings->Other linker options加上`curl-config
--libs`
Search
directories->Compiler加上个/usr/include(这个因人而异)
Search
directories->Linker加上个/usr/lib(这个因人而异)
大功告成,确定
下面直接贴代码好了
#include <iostream> #include <curl/curl.h> using namespace std; size_t read_data(void *buffer, size_t size, size_t nmemb, void *user_p) { return fread(buffer, size, nmemb, (FILE *)user_p); } int main() { //初始化libcurl CURLcode code; code = curl_global_init(CURL_GLOBAL_ALL); if (CURLE_OK != code) { cerr<<"init libcurl failed"<<endl; return -1; } FILE *fp = fopen("要上传的文件路径", "rb"); if (NULL == fp) { cout<<"can not open file"<<endl; curl_global_cleanup(); return -1; } //获取文件大小 fseek(fp, 0, 2); int file_size = ftell(fp); rewind(fp); //获取easy handle CURL *easy_handle = curl_easy_init(); if (NULL == easy_handle) { cerr<<"get a easy handle failed"<<endl; fclose(fp); curl_global_cleanup(); return -1; } //设置easy handle属性 curl_easy_setopt(easy_handle, CURLOPT_URL, "ftp://IP/文件夹名/文件名"); curl_easy_setopt(easy_handle, CURLOPT_UPLOAD, 1); curl_easy_setopt(easy_handle, CURLOPT_USERPWD, "用户名:密码"); //curl_easy_setopt(easy_handle, CURLOPT_VERBOSE, 1);//打印debug信息 curl_easy_setopt(easy_handle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1); curl_easy_setopt(easy_handle, CURLOPT_READFUNCTION, &read_data); curl_easy_setopt(easy_handle, CURLOPT_READDATA, fp); curl_easy_setopt(easy_handle, CURLOPT_INFILESIZE, file_size); //执行数据请求 code = curl_easy_perform(easy_handle); if (code == CURLE_OK) { cout<<"upload successfully"<<endl; } else { cout<<code<<endl; cout<<curl_easy_strerror(code)<<endl; } //释放资源 fclose(fp); curl_easy_cleanup(easy_handle); curl_global_cleanup(); return 0; }
在这里说一说我遇到的小问题吧
代码里最后一个curl_easy_setopt函数里,之前的大神博客里给的参数是CURLOPT_INFILELSIZE_LARGE,可能是我上传的文件比较小的原因吧,老是报CURLE_PARTIAL_FILE,说我Transferred a partial file,冥思苦想不得其解。。把代码里的打印debug信息的那一行注释回来发现文件块的大小不符,自作主张把LARGE干掉,一切正常。。
其他也没什么好说了,就是libcurl的相关文章不太好找,希望大家多多分享吧
相关文章推荐
- ubuntu主机配置FTP后解决无法接受文件上传的问题
- libcurl post/get上传下载文件 以及断点下载(操作libcurl 实现断点下载(续点续传))
- python 使用ftplib模块上传文件
- curl用ftp方式断点续传下载上传文件
- Python--利用ftplib自动上传/下载文件
- codeblocks添加库文件 libpthread.a
- linux-arm笔记2:如何在ubuntu上安装ftp,并且用ftp向arm开发板上传文件
- Ubuntu安装CodeBlocks相关问题(不能编译或者编译通过但不能生成可执行文件)
- cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp
- Ubuntu 14.10 下Hadoop FTP文件上传配置
- 思科C3750 FTP上传tar格式IOS文件及Front-end Microcode微码更新
- ubuntu的curl命令,用来下载上传文件
- Ubuntu与开发板之间使用ftp上传及下载文件
- linux/Ubuntu下ftp上传文件的权限默认设置
- python ftplib上传文件出现ftplib.error_perm 550 The parameter is incorrect错误的原因和解决
- Ubuntu 11.04 Code::Blocks 下编译OpenCV文件
- ubuntu+opencv+codeblocks建立工程文件
- python ftplib 定时上传文件完整代码。
- C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用
- curllib上传文件c/c++