linux c 基于libcurl 库的ftp上传和下载代码
http://blog.csdn.net/zengraoli/article/details/115173672013昨天考虑好了IM传送图片的方式,用的是FTP做缓存来传递图片,以减少聊天服务器的压力,用的是libcurl库,自己下载了一个Server-U 服务器,下面是测试程序,上传和下载都跑通了,剩下的就是在程序中写逻辑来实现具体的功能了。 上传代码:
[cpp] view plain copy print?//ftp上传实例 // 服务器地址:192.168.0.185 账号:spider 密码:spider // 在服务器路径 a上建立一个a.txt ,本地文件是test.txt // 命令行参数192.168.0.185 spider spider a a.txt D:/test.txt //#include <stdlib.h> //#include <stdio.h> //#include <curl/curl.h> //#include <string.h> // //int debugFun(CURL* curl, curl_infotype type, char* str, size_t len, void* stream) //{ // //只打印CURLINFO_TEXT类型的信息 // if(type == CURLINFO_TEXT) // { // fwrite(str, 1, len, (FILE*)stream); // } // return 0; //} // //int main(int argc, char** argv) //{ // CURL* curl; // CURLcode res; // char errorBuf[CURL_ERROR_SIZE]; // FILE
*sendFile, *debugFile; // char ftpurl[256 + 1]; // char usrpasswd[64 + 1]; // // curl_slist *slist=NULL; // // if(argc != 7) // { // printf(\
destFileName srcFile\ // return -1; // } // // //将相关的调试信息打印到dubugFile.txt中 // if(NULL == (debugFile = fopen(\ // return -1; // // //打开ftp上传的源文件 //
if(NULL == (sendFile = fopen(argv[6], \ // { // fclose(debugFile); // return -1; // } // // //获取需要发送文件的大小 // fseek(sendFile, 0, SEEK_END); // int sendSize = ftell(sendFile); // if(sendSize < 0) // { //
fclose(debugFile); // fclose(sendFile); // return -1; // } // fseek(sendFile, 0L, SEEK_SET); // // if((res =
curl_global_init(CURL_GLOBAL_ALL)) != 0) // { // fclose(debugFile); //
fclose(sendFile); // return -1; // } // if((curl = curl_easy_init()) == NULL) // { // fclose(debugFile); // fclose(sendFile); // curl_global_cleanup(); // return -1; // }
// // if(argv[4][strlen(argv[4]) - 1] != '/') // sprintf(ftpurl, \ // else // sprintf(ftpurl, \argv[1], argv[4], argv[5]); // curl_easy_setopt(curl, CURLOPT_URL, ftpurl); // //设置ftp上传url,组成如下的URL //
//ftp://192.168.31.145//root/subdir/curl/testftp.txt // // sprintf(usrpasswd, \ // curl_easy_setopt(curl, CURLOPT_USERPWD, usrpasswd); // // curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); // curl_easy_setopt(curl, CURLOPT_DEBUGDATA, debugFile); // // curl_easy_setopt(curl, CURLOPT_READDATA, sendFile); //
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); // curl_easy_setopt(curl, CURLOPT_INFILESIZE, sendSize); // curl_easy_setopt(curl,
CURLOPT_FTP_CREATE_MISSING_DIRS, 1); // // curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION,
debugFun); // // res = curl_easy_perform(curl); // if(0 != res) // { // fclose(sendFile); // fclose(debugFile); // curl_easy_cleanup(curl); // curl_global_cleanup(); // return -1;